基于力量的搜索多个术语

时间:2015-10-20 21:00:37

标签: c# linq search nhibernate

我正试图弄清楚如何使用多个字段/术语实现“基于强度的搜索”。例如:

搜索:

  • 腿数:4
  • 毛皮:真实
  • Has Hooves:True
  • 关键词:Moo

结果:

  • [高]牛
  • [中]猫
  • [中]狗
  • [低]无毛鼹鼠
  • [不匹配]​​ Bird

值得一提的是,我实际模型中的标准有些加权,相关和结构化。

我选择的语言是C#.NET,我正在使用LINQ + Fluent NHibernate。我一直在玩几种不同的方法来实现这一点,但大多数人都觉得笨重。目前,我使用的DB有超过100,000个“动物”,可以在~15个字段中搜索它们。

问题:

这种搜索是否有名称?

在尝试实施此操作时,是否有我应该注意的最佳做法或技巧?

有哪些高性能方法可以实现这样的搜索? Psuedo代码和通用逻辑与代码一样受欢迎。

1 个答案:

答案 0 :(得分:1)

您正在谈论" weighted term query"。

由于您已经在使用LINQ并且我假设使用MSSQL,因此您最快的解决方案可能是编写一个使用全文搜索功能(CONTAINSTABLEISABOUT)"排名"结果你想要的方式。

如果您预计搜索流量过大或排名要求变得更加复杂,或者您的收藏量显着增加,则应考虑将此功能分解为Solr或Elasticsearch等搜索引擎。