为什么Lucene / Solr得分手正在计算OR子句的权重总和。它使得查询得分与具有更多替代方案的术语失去平衡。拥有查询术语替代品的最大权重不是更有意义吗?
以下是一个例子:
我在solr管理界面中运行:gucci(手提包或钱包或钱包)
通过单击调试,我可以看到解析的查询符合预期:
"parsedquery":"text:gucci (text:handbag text:purse text:pocketbook)"
解释字段显示得分手正在制作(我在这里简化一下):
weight(gucci) + sum( weight(handbag) + weight(purse) + weight(pocketbook))
结果是包含手提包,钱包和钱包的结果将比包含gucci和手提包的结果得分更高。我认为这是违反直觉的。对我而言,OR意味着这些术语是等同的,而不是它们更重要。此外,我可以使用查询术语提升来独立完成此任务。
我尝试使用Edismax,它有类似的行为。
有没有办法让OR子句保留查询术语“重要性”?
答案 0 :(得分:0)
您可以尝试使用DisjunctionMaxQuery
并为分离设置不同的提升因子。看看tieBreakMultiplier
构造函数参数 - 它可以帮助您实现所需。引用文档:
tieBreakerMultiplier< ..>值< ..>说在一个得分较低的领域中出现了10个单词 在得分较低的领域也是如此,在得分较低的领域中也是一个独特的单词