java - 为单个和复合词创建搜索过滤器的最有效方法是什么?
问题描述
我们有一种情况,我们正在进行搜索,用户可以提供一个项目列表作为搜索的过滤器。
例如,假设我们正在搜索包含特定食物的食谱。我们可能有一份可能的食物清单,例如:
- 牛肉
- 鸡
- 鱼
- 萝卜
- 豌豆
- 洋葱
- 白饭
- 豆子
但我们也希望用户能够搜索“任何肉类”或“任何蔬菜”,并让它返回与所有肉类可能性或所有蔬菜可能性相匹配的任何东西。
我们可以让客户端进行解析,当用户选择“肉类”时,发送所有肉类选择。但是当用户选择这样的更高类别时,我们还需要执行其他逻辑。例如,如果他们选择“任何肉类”,我们可以搜索一个附加数据库,其中包含标记为“肉类”的食谱,而不是单个肉类。
(我正在根据我们实际的业务需求来制作这个例子,这些需求要无聊得多,但这本质上就是这个想法。)
我能想到几个可能的解决方案,它们是同一件事的阴影:
- 在搜索条件中有两个不同的列表,一个用于单个项目的枚举,一个用于组的枚举,然后在过滤搜索时将两者结合起来。
- 在搜索条件中有一个列表,其中包含一个包含单个项目和组项目的枚举。
但我觉得我错过了一个在代表群体/个人关系方面可能更优雅的解决方案。是否有解决这种情况的模式?
(PS:这是在 Java 中,但我认为这并不特别重要。)
解决方案
在搜索任何内容时,Apache SOLR 和 Elastic Search是最好的。您可以在上述框架中进行所有类型分组、分类和其他类型搜索。我会建议利用 Apache Solr 或 Elastic 搜索,而不是从头开始编写代码。
推荐阅读
- tensorflow - 了解 summary() 的值(输出形状,参数#)?
- matplotlib - 使用 seaborn 包关闭联合图上的 x 轴边缘分布轴
- amazon-s3 - 从 ColdFusion 访问 S3 存储桶
- react-native - react native inapp update - 使用示例
- javascript - NuxtJS:Concat 绑定值?
- pandas - 如果熊猫数据框中不存在替换术语,如何忽略它们?
- javascript - python + selenium:发送多行文本到输入
- c# - 如何回收/重用子视图列表而不必重新计算大小以获得更好的性能?Xamarin 表单
- javascript - Apex - 小部件/组件类型的默认选项
- python - 用 CSV 编写字典列表