我正在使用Solr 5.2,可能很快就会升级到8.2,以及edismax在选定字段中搜索字符串。 某些查询字段使用 ngram,因此包含搜索字符串的结果将显示在搜索中。 我希望以搜索词开头的匹配项的文档显示在搜索结果的开头。
我的第一次尝试是将字符串字段和文本 ngram 字段放在qf
中并搜索字符串并从使用 boost 开始。 例如,如果搜索字符串是"lorem",我会使用:
q=(lorem*( or (lorem(
我还会对字符串字段使用助推器。 但是,ngram 匹配项似乎得分更高,因此以搜索词开头的匹配并不总是首先显示。
如何让搜索词位于搜索字符串开头的匹配项首先显示?
可悲的是,语法很尴尬,而且无法预测。从字面上看,您需要的是
q=({!prefix f=string_fied}lorem)^100 {!field f=ngram_field}electric&defType=lucene
注意:
dismax(你通过引用
qf
暗示(不支持通配符,参考指南中有一条注释。不要从
{
这里有一个惊喜开始复杂的查询。您甚至可以使用空格来启动它。
如果你想在这两个组中拥有多字段,请使用 CC_5 ,来模拟 dismax mutifield 行为。
祝你好运。你真的需要它。
顺便说一句,看看JSON查询DSL,它可能会避免这样的语法炸弹和一点更干净。