当提升项出现在超过 1 个字段中时,在 solr 中查询字段提升问题
Query Field Boosting issue in solr when boosted term is present in more than 1 field
我在 solr 中有 4 个字段。
对于前。 Field1, Field2, Field3 and Field4.
我的提升序列就像 field1^10, field2^8, field3^7 field4^6
。
现在,如果我搜索关键字营销,可以说 q=(Field1:("marketing")^10 OR Field2:("marketing")^8 OR Field3:("marketing")^7 OR Field4:("marketing")^6)
。
要求:
现在根据要求,field1
中的营销应该首先出现,依此类推,效果很好。
问题:
但是有一个记录,其中 marketing 出现在 Field3
和 Field4
中,它出现在结果中的第二位,而 Field2 中包含 marketing 的记录出现在结果中的第三位,这可能是因为评分机制。
我需要的解决方案:
我想按照在该字段中应用的提升顺序显示记录,无论它是否在多个字段中找到,即 field2 中具有营销的记录应该始终在结果中出现第二位。
我可以想出两种方法来解决这个问题:
使用 qf
查询参数 - 如果您在 qf
参数而不是 q
中传递字段和靴子,那么您的查询看起来像这样:q=marketing&qf="field1^10 field2^8, field3^7 field4^6"
然后解析的查询将是这样的: max(field1:marketing^10,field2:marketing^8,field3:marketing^7 OR , field4:marketing^6)
所以不管他们出现多少字段它只会取最大值。
更改提升值,使每个提升值都高于他之前提升值的总和。例如:field4^1
、field3^2
、field2^4
、field1^8
,这样字段的组合就不会影响排序。
@MatsLindh 在评论中给出的回复是正确的解决方案:
You can however try to increase your boosts to have a much larger
difference between the different levels - field1^100000, field2^10000, field3^1000 field4^100
- that way, given the same
content, two later fields will not add up to a larger boost than the
ones before it.
Note: Be aware that the scores will be affected by more than just the boost (such as the number of occurences, etc.).
我在 solr 中有 4 个字段。
对于前。 Field1, Field2, Field3 and Field4.
我的提升序列就像 field1^10, field2^8, field3^7 field4^6
。
现在,如果我搜索关键字营销,可以说 q=(Field1:("marketing")^10 OR Field2:("marketing")^8 OR Field3:("marketing")^7 OR Field4:("marketing")^6)
。
要求:
现在根据要求,field1
中的营销应该首先出现,依此类推,效果很好。
问题:
但是有一个记录,其中 marketing 出现在 Field3
和 Field4
中,它出现在结果中的第二位,而 Field2 中包含 marketing 的记录出现在结果中的第三位,这可能是因为评分机制。
我需要的解决方案: 我想按照在该字段中应用的提升顺序显示记录,无论它是否在多个字段中找到,即 field2 中具有营销的记录应该始终在结果中出现第二位。
我可以想出两种方法来解决这个问题:
使用
qf
查询参数 - 如果您在qf
参数而不是q
中传递字段和靴子,那么您的查询看起来像这样:q=marketing&qf="field1^10 field2^8, field3^7 field4^6"
然后解析的查询将是这样的:max(field1:marketing^10,field2:marketing^8,field3:marketing^7 OR , field4:marketing^6)
所以不管他们出现多少字段它只会取最大值。更改提升值,使每个提升值都高于他之前提升值的总和。例如:
field4^1
、field3^2
、field2^4
、field1^8
,这样字段的组合就不会影响排序。
@MatsLindh 在评论中给出的回复是正确的解决方案:
You can however try to increase your boosts to have a much larger difference between the different levels -
field1^100000, field2^10000, field3^1000 field4^100
- that way, given the same content, two later fields will not add up to a larger boost than the ones before it.Note: Be aware that the scores will be affected by more than just the boost (such as the number of occurences, etc.).