如何在Solr中执行常量分数查询

如何在Solr中执行常量分数查询,solr,lucene,solrnet,solr-boost,Solr,Lucene,Solrnet,Solr Boost,我使用SolrNet访问Solr索引,其中有一个名为“tags”的多值字段。我想执行以下伪代码查询: (标记:堆栈)^10或(标记:上方)^5或(标记:流动)^2 其中术语“堆栈”增加10,“过”增加5,“流量”增加2。我所追求的结果是,使用“堆栈”的结果将比使用“流”的结果更高,等等 我遇到的问题是,“流”只出现在几个文档中,而“堆栈”则出现在加载中,然后由于idf值较高,带有“流”的文档出现在带有“堆栈”的文档之上 当这个项目直接在Lucene中实现时,我使用了ConstantScoreQu

我使用SolrNet访问Solr索引,其中有一个名为“tags”的多值字段。我想执行以下伪代码查询:

(标记:堆栈)^10或(标记:上方)^5或(标记:流动)^2

其中术语“堆栈”增加10,“过”增加5,“流量”增加2。我所追求的结果是,使用“堆栈”的结果将比使用“流”的结果更高,等等

我遇到的问题是,“流”只出现在几个文档中,而“堆栈”则出现在加载中,然后由于idf值较高,带有“流”的文档出现在带有“堆栈”的文档之上

当这个项目直接在Lucene中实现时,我使用了ConstantScoreQuery,这些工具消除了仅基于boost值的分数的idf

如何使用Solr和SolrNet实现这一点,而我只是有效地向Solr传递一个查询字符串?如果不能,有没有其他方法可以解决这个问题


提前谢谢

我不认为有任何方法可以直接在Solr中表示ConstantCoreQuery,但似乎是这样,所以您可以尝试假装范围查询,例如
标记:[流到流]


或者,您可以实现自己的Solr QueryParser。

Solr 5.1,更高版本通过^=操作符将其内置到查询解析器语法中

因此,只需接受您最初的查询: (标记:堆栈)^10或(标记:上方)^5或(标记:流动)^2

并将^替换为^=以从增强变为常数:
(tags:stack)^=10或(tags:over)^=5或(tags:flow)^=2

如果你从上一个从句中扣除分数提升怎么办<代码>(tags:flow)我相信这是一个恒定的分数查询。实际上,这是一个1分的提升,这是默认值。假装一个范围查询是一种享受(至少现在是这样)。如果时间允许,我可以考虑实现一个自定义查询解析器。谢谢。添加假范围查询将影响性能。。这应该是公认的答案。。谢谢你的解决方案@Yonik