2016-08-24 85 views
2

我正在嘗試提高從solr搜索返回的文檔的得分。Solr提高特定字段值

我想達到的提升是沿着線的東西:

field1:(value1)^5 OR field2:(value2)^2 

如果文件確實由5 如果文件確實有場2匹配值2,升壓2有field1的匹配值1,升壓

這些文件有很多字段,我們稱它們爲field1,field2 ...並可能缺少某些字段。

這些文檔不需要分別具有與value1,value2匹配的field1或field2。

我還有其他的過濾器的查詢,如:

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

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

fq: field4: 1 

我對某一個領域沒有任何的查詢使用分組我的結果。

原始查詢參數:

group=true&group.facet=true&group.field=anIndependentField 

我使用的是相同的FQ與嘗試不同的查詢分析器。

solr中有足夠的文檔與field1:value1和/或field2:value2以及這些字段的其他值。

  1. 標準查詢分析器

方法)問:字段1:

到目前爲止,我已經使用查詢分析器嘗試(值)^ 5或場:(值2)^2 //沒有結果

方法b)●:*:* OR field1的:(值1)^ 5 OR FIELD2:(值2)^ 2 //沒有結果

方法C)問: (value1)^ 5 OR(value2)^ 2 //不正確。尋找完整的匹配。

方法d)q:(value1)^ 5(value2)^ 2 //不正確。查找完整匹配

  • EDisMax查詢解析器
  • (DEFTYPE = edismax)

    問:*:*

    bq: field1:(value1)^5 OR field2:(value2)^2 
    

    問題這一個是結果不按預期順序。 具有field1的文檔:somethingElse和field2:somethingElse2得分高於具有field1的文檔:somethingElse和field2:value2。

    任何人都可以看到我做錯了什麼或有建議,以改善我的搜索查詢的相關性?

    +0

    您是否試過拆分'bq'參數? '&BQ = FIELD1:VALUE1^5&BQ = FIELD2:VALUE2^2' – MatsLindh

    回答

    0

    可以使用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))