基于强度的搜索多个术语
Strength Based Search Multiple Terms
我正在尝试弄清楚如何使用多个 fields/terms 来实现 "strength based search"。例如:
正在搜索:
- 腿数:4
- 有毛皮:正确
- 有蹄子:正确
- 关键词:哞
结果:
- [高]牛
- [中]猫
- [中]狗
- [低]无毛鼹鼠
- [不匹配]鸟
可能值得一提的是,我的实际模型中的标准在某种程度上是加权的、相关的和结构化的。
我选择的语言是 C#.NET,我使用的是 LINQ + Fluent NHibernate。我一直在玩弄几种不同的方法来实现这一点,但大多数都感觉很笨拙。目前,我正在使用的数据库有超过 100,000 个 "Animals",并且可以根据 ~15 个字段搜索它们。
问题:
这种搜索有名字吗?
在尝试实现此功能时,我应该注意哪些最佳实践或技术?
有哪些高性能方法可以实现这样的搜索?伪代码和通用逻辑与代码一样受欢迎。
你说的是“weighted term query”。
由于您已经在使用 LINQ 并且我假设是 MSSQL,您最快的解决方案可能是编写一个使用 full-text 搜索函数(CONTAINSTABLE
和 ISABOUT
) 到 "rank" 结果如您所愿。
如果您预计搜索流量会很大,或者您的排名要求会变得更加复杂,或者您的 collection 增长显着,您应该考虑将此功能分解到 Solr 或 Elasticsearch 等搜索引擎中。
我正在尝试弄清楚如何使用多个 fields/terms 来实现 "strength based search"。例如:
正在搜索:
- 腿数:4
- 有毛皮:正确
- 有蹄子:正确
- 关键词:哞
结果:
- [高]牛
- [中]猫
- [中]狗
- [低]无毛鼹鼠
- [不匹配]鸟
可能值得一提的是,我的实际模型中的标准在某种程度上是加权的、相关的和结构化的。
我选择的语言是 C#.NET,我使用的是 LINQ + Fluent NHibernate。我一直在玩弄几种不同的方法来实现这一点,但大多数都感觉很笨拙。目前,我正在使用的数据库有超过 100,000 个 "Animals",并且可以根据 ~15 个字段搜索它们。
问题:
这种搜索有名字吗?
在尝试实现此功能时,我应该注意哪些最佳实践或技术?
有哪些高性能方法可以实现这样的搜索?伪代码和通用逻辑与代码一样受欢迎。
你说的是“weighted term query”。
由于您已经在使用 LINQ 并且我假设是 MSSQL,您最快的解决方案可能是编写一个使用 full-text 搜索函数(CONTAINSTABLE
和 ISABOUT
) 到 "rank" 结果如您所愿。
如果您预计搜索流量会很大,或者您的排名要求会变得更加复杂,或者您的 collection 增长显着,您应该考虑将此功能分解到 Solr 或 Elasticsearch 等搜索引擎中。