【问题标题】:Prioritizing search results in Solr that start with the search stringSolr 中以搜索字符串开头的搜索结果的优先级
【发布时间】:2020-05-05 18:45:28
【问题描述】:

我正在使用 Solr 5.2,可能很快会升级到 8.2,并使用 edismax 在选定字段中搜索字符串。一些查询字段使用 ngram,因此包含搜索字符串的结果将显示在搜索中。我想让以搜索词开头的匹配文档显示在搜索结果的开头。

我的第一次尝试是将字符串字段和文本 ngram 字段都放在 qf 中,然后搜索这两个字符串并从使用 boost 开始。例如,如果搜索字符串是“lorem”,我会使用:

q=(lorem*) 或 (lorem)

我也会对字符串字段使用助推器。但是,ngram 匹配似乎得分更多,因此以搜索词开头的匹配并不总是首先出现。

如何在搜索字符串开头的搜索词首先显示匹配项?

【问题讨论】:

  • 所以当整个单词匹配时,应该有一个提升或者单词应该被词干还是只是第一个单词?
  • 这是短字段。 Boost 需要用于字段以该值开头时。例如,如果搜索“ABC”,则“123ABC”和“ABC123”都应该出现,但“ABC123”应该在最前面。

标签: solr edismax


【解决方案1】:

遗憾的是,语法很笨拙,而且无法预测。从字面上看,您需要的是

q=({!prefix f=string_fied}lorem)^100 {!field f=ngram_field}electric&defType=lucene

注意:

  1. dismax(您通过引用 qf 暗示)不支持通配符,参考指南中有说明。

  2. 不要从{ 开始复杂的查询,这里有一个惊喜。你甚至可以使用空间 来启动它。

  3. 如果您想在这两个组中拥有多个字段,请使用{!max},以模仿 dismax 多字段行为。

祝你好运。你真的需要它。

PS。顺便说一句,看看 JSON Query DSL,它可能会避免这样的语法炸弹并且更简洁一些。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 2019-05-21
    • 2013-11-28
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多