Solr提升特定字段值

Solr提升特定字段值,solr,solr5,Solr,Solr5,我正在努力提高solr中搜索返回的文档的分数 我想要实现的提升是以下几点: field1:(value1)^5 OR field2:(value2)^2 如果文档确实有字段1匹配值1,则增加5。 如果文档确实有字段2匹配值2,则增加2。 文档有很多字段,我们把它们叫做field1,field2。。。并且可能缺少某些字段 文档不需要字段1或字段2分别与值1、值2匹配 我还有其他过滤器查询,例如: fq: field1:[* TO *] <- checking for presence

我正在努力提高solr中搜索返回的文档的分数

我想要实现的提升是以下几点:

field1:(value1)^5 OR field2:(value2)^2 
如果文档确实有字段1匹配值1,则增加5。 如果文档确实有字段2匹配值2,则增加2。

文档有很多字段,我们把它们叫做field1,field2。。。并且可能缺少某些字段

文档不需要字段1或字段2分别与值1、值2匹配

我还有其他过滤器查询,例如:

fq: field1:[* TO *]  <- checking for presence of

fq: field3: ("something" "somethingelse")

fq: field4: 1
我对不同的查询解析器使用相同的fq

solr中有足够多的文档包含field1:value1和/或field2:value2以及这些字段的其他值

到目前为止,我已经尝试使用查询解析器:

  • 标准查询解析器
  • 方法a)q:field1:(值1)^5或field2:(值2)^2//无结果

    方法b)q::*或字段1:(值1)^5或字段2:(值2)^2//无结果

    方法c)q:(值1)^5或(值2)^2//不正确。寻找完全匹配

    方法d)q:(值1)^5(值2)^2//不正确。寻找完全匹配

  • EDisMax查询解析器
  • (defType=edismax)

    问题:*:*

    bq: field1:(value1)^5 OR field2:(value2)^2 
    
    这一个的问题是,结果并没有按预期的顺序排列。 具有字段1:somethingElse和字段2:somethingElse的文档比具有字段1:somethingElse和字段2:value2的文档得分更高


    有人知道我做错了什么,或者有人建议改进我的搜索查询的相关性吗?

    您可以通过以下方式使用eDismax queryParser的bf参数:

    bf=if(termfreq(field1,"value1"),5,if(termfreq(field2,"value2"),2,1))
    
    请在下面找到完整的查询

    https://<MY_SERVER_NAME>:9443/solr/<MY_COLLECTION>/select?q=*%3A*&wt=json&indent=true&defType=edismax&bf=if(termfreq(field1%2C%22value1%22)%2C3%2Cif(termfreq(field2%2C%22value2%22)%2C2%2C0))
    
    https://:9443/solr//select?q=*%3A*&wt=json&indent=true&defType=edismax&bf=if(termfreq(field1%2C%22value1%22)%2C3%2Cif(termfreq(field2%2C%22value2%22)%2C2%2C0))
    
    您是否尝试过拆分
    bq
    参数<代码>&bq=field1:value1^5&bq=field2:value2^2
    https://<MY_SERVER_NAME>:9443/solr/<MY_COLLECTION>/select?q=*%3A*&wt=json&indent=true&defType=edismax&bf=if(termfreq(field1%2C%22value1%22)%2C3%2Cif(termfreq(field2%2C%22value2%22)%2C2%2C0))