Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Solr中对以搜索字符串开头的搜索结果进行优先级排序_Solr_Edismax - Fatal编程技术网

在Solr中对以搜索字符串开头的搜索结果进行优先级排序

在Solr中对以搜索字符串开头的搜索结果进行优先级排序,solr,edismax,Solr,Edismax,我正在使用Solr5.2,可能很快会升级到8.2,同时使用eDiscoveryMax在选定字段中搜索字符串。一些查询字段使用ngram,因此包含搜索字符串的结果将显示在搜索中。我想有一个文件,其中有一个匹配,以搜索词开始显示在搜索结果的开头 我的第一次尝试是将字符串字段和文本ngram字段都放在qf中,然后搜索这两个字符串,并从使用boost开始。例如,如果搜索字符串为“lorem”,我将使用: q=(lorem*)或(lorem) 我也会对字符串字段使用助推器。然而,ngram匹配似乎得分更高

我正在使用Solr5.2,可能很快会升级到8.2,同时使用eDiscoveryMax在选定字段中搜索字符串。一些查询字段使用ngram,因此包含搜索字符串的结果将显示在搜索中。我想有一个文件,其中有一个匹配,以搜索词开始显示在搜索结果的开头

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

q=(lorem*)或(lorem)

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


如何让搜索词位于搜索字符串开头的匹配首先显示?

遗憾的是,语法很难理解,而且不可预测。你真正需要的是

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

  • Demax(您指的是
    qf
    )不支持通配符,参考指南中有一个注释

  • 不要从
    {
    开始复杂的查询这里有一个惊喜。您甚至可以使用空格
    来启动它

  • 如果您希望在这两个组中有多个字段,请使用
    {!max}
    ,以模拟dismax多字段行为

  • 祝你好运,你真的需要它


    顺便说一句,看看JSON查询DSL,它可能会避免这种语法炸弹,而且会更干净一些。

    因此,当整个单词匹配时,应该有一个boost,或者该单词应该是词干,还是仅仅是第一个单词?这是短字段。boost需要用于字段以该值开头的时间。例如,如果搜索是“ABC”,则应同时显示“123ABC”和“ABC123”,但应首先显示“ABC123”。