我正在使用SolrNet访问Solr索引,其中我有一个名为“tags”的多值字段。我想执行以下伪代码查询:
(tags:stack)^ 10 OR(tags:over)^ 5 OR(tags:flow)^ 2
其中术语“堆栈”被提升10,“over”被提升5,“flow”被提升2.我得到的结果是“堆栈”的结果将显得高于有“流”等的人
我遇到的问题是说“流”只出现在几个文档中,但是“堆栈”出现在加载中,然后由于高的idf值,带有“flow”的文档出现在那些带有“stack”的文档之上”
当这个项目在Lucene中直接实现时,我使用了ConstantScoreQuery,这些仅仅根据提升值消除了基于idf的idf。
如何通过Solr和SolrNet实现这一点,我有效地将Solr传递给查询字符串?如果不能,有没有其他方法可以解决这个问题?
提前致谢!
答案 0 :(得分:6)
Solr 5.1及更高版本通过^ =运算符将其内置到查询解析器语法中。
所以只需要原始查询: (tags:stack)^ 10 OR(tags:over)^ 5 OR(tags:flow)^ 2
用^ =替换^以从增强变为常量: (tags:stack)^ = 10 OR(tags:over)^ = 5 OR(tags:flow)^ = 2
答案 1 :(得分:2)
我认为在Solr中没有任何方法可以直接表达ConstantScoreQuery,但它似乎是range and prefix queries use ConstantScoreQuery under the hood,因此您可以尝试伪造范围查询,例如tags:[flow TO flow]
或者,您可以实现自己的Solr QueryParser。