Solr 搜索相关性

Solr search relevancy

我使用 solr,结果得分有问题。例如 我有一个字段的此类文档(例如 "content"):

  1. 内容=汽车
  2. 内容=汽车
  3. content = carable awesome
  4. 内容 = 可恶的内容

我用这样的参数进行搜索查询“:{ "mm":"1", "q":"car", "tie":"0.1", "defType":"dismax", "fl":"*, 分数",}

我希望看到这样的结果:

没有"s"的单词应该更高,但我有奇怪的事情。我如何提高绝对匹配度(比如汽车)

发生这种情况是因为您为该字段使用的字段类型附加了词干过滤器(或 ngramfilter)(这使得 carscar 生成相互匹配)。你不能在这样的字段中提升 "exact hits",因为对于 Lucene 它们是相同的值carcars 索引中存储的内容相同 - 后者也被处理为 car

要实现这一点并获得更高的准确命中率,您可以添加第二个字段,但不存在该过滤器,该过滤器仅将您的内容标记化(拆分)为空白并将标记小写。这样你就有了一个字段,其中 carscar 存储为不同的标记,如果不匹配,标记将不会对分数有贡献。

您可以在 Solr 中使用 qf 来告诉 Solr 您要搜索哪些字段,同时您可以提供提升 - 所以在您的情况下您会 qf=exact_field^10 text_field exact_field 中的命中值比常规字段中的命中值高十倍(确切的提升值将取决于您的用例以及您希望查询配置文件的行为方式)。

您还可以使用不同的提升参数(bqboost)在常规查询之外应用提升(即向 bq 添加一个复制原始查询的查询), 但之前的建议可能会奏效。