在Solr中对以搜索字符串开头的搜索结果进行优先级排序
我正在使用Solr5.2,可能很快会升级到8.2,同时使用eDiscoveryMax在选定字段中搜索字符串。一些查询字段使用ngram,因此包含搜索字符串的结果将显示在搜索中。我想有一个文件,其中有一个匹配,以搜索词开始显示在搜索结果的开头 我的第一次尝试是将字符串字段和文本ngram字段都放在在Solr中对以搜索字符串开头的搜索结果进行优先级排序,solr,edismax,Solr,Edismax,我正在使用Solr5.2,可能很快会升级到8.2,同时使用eDiscoveryMax在选定字段中搜索字符串。一些查询字段使用ngram,因此包含搜索字符串的结果将显示在搜索中。我想有一个文件,其中有一个匹配,以搜索词开始显示在搜索结果的开头 我的第一次尝试是将字符串字段和文本ngram字段都放在qf中,然后搜索这两个字符串,并从使用boost开始。例如,如果搜索字符串为“lorem”,我将使用: q=(lorem*)或(lorem) 我也会对字符串字段使用助推器。然而,ngram匹配似乎得分更高
qf
中,然后搜索这两个字符串,并从使用boost开始。例如,如果搜索字符串为“lorem”,我将使用:
q=(lorem*)或(lorem)
我也会对字符串字段使用助推器。然而,ngram匹配似乎得分更高,因此以搜索词开头的匹配并不总是首先显示
如何让搜索词位于搜索字符串开头的匹配首先显示?遗憾的是,语法很难理解,而且不可预测。你真正需要的是
q=({!prefix f=string_fied}lorem)^100 {!field f=ngram_field}electric&defType=lucene
注:
qf
)不支持通配符,参考指南中有一个注释{
开始复杂的查询这里有一个惊喜。您甚至可以使用空格
来启动它{!max}
,以模拟dismax多字段行为顺便说一句,看看JSON查询DSL,它可能会避免这种语法炸弹,而且会更干净一些。因此,当整个单词匹配时,应该有一个boost,或者该单词应该是词干,还是仅仅是第一个单词?这是短字段。boost需要用于字段以该值开头的时间。例如,如果搜索是“ABC”,则应同时显示“123ABC”和“ABC123”,但应首先显示“ABC123”。