【问题标题】:Strength Based Search Multiple Terms基于强度的搜索多个词
【发布时间】:2016-01-19 16:56:28
【问题描述】:

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

正在搜索:

  • 腿数:4
  • 有毛皮:是的
  • 有蹄子:是的
  • 关键词:哞

结果:

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

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

我选择的语言是 C#.NET,我使用的是 LINQ + Fluent NHibernate。我一直在尝试几种不同的方法来实现这一点,但大多数都觉得笨拙。目前,我使用的数据库有超过 100,000 个“动物”,可以针对大约 15 个字段进行搜索。

问题:

这种搜索有名字吗?

在尝试实现此功能时,我应该注意哪些最佳实践或技术?

有哪些高性能方法可以实现这样的搜索?伪代码和一般逻辑与代码一样受到重视。

【问题讨论】:

  • 您可以使用 SQL Server 的全文搜索来生成关键字的相关性分数,并将其与您的布尔值合并以生成复合相关性分数。这应该会使您的搜索速度相当快。

标签: c# linq search nhibernate


【解决方案1】:

您说的是“weighted term query”。

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


如果您预计搜索流量会很大,或者您的排名要求会变得更加复杂,或者您的收藏会显着增长,您应该考虑将此功能拆分到 Solr 或 Elasticsearch 等搜索引擎中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2012-04-25
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多