我正在使用 SolrNet 访问 Solr 索引,其中我有一个名为“标签”的多值字段。我想执行以下伪代码查询:
(标签:堆栈)^10 或(标签:结束)^5 或(标签:流)^2
术语“stack”被提升了 10,“over”被提升了 5,“flow”被提升了 2。我想要的结果是带有“stack”的结果会比那些有“流量”等的。
我遇到的问题是说“流”只出现在几个文档中,但“堆栈”出现在负载中,然后由于高 idf 值,带有“流”的文档出现在带有“堆栈”的文档之上".
当这个项目直接在 Lucene 中实现时,我使用了 ConstantScoreQuery,这些消除了仅基于提升值的分数的 idf。
如何使用 Solr 和 SolrNet 实现这一点,我实际上只是向 Solr 传递一个查询字符串?如果不能,是否有其他方法可以解决此问题?
提前致谢!
最佳答案
Solr 5.1 及更高版本通过 ^= 运算符将其内置到查询解析器语法中。
因此,只需采用您的原始查询: (tags:stack)^10 或 (tags:over)^5 或 (tags:flow)^2
并将 ^ 替换为 ^= 以从增强更改为常量: (tags:stack)^=10 或 (tags:over)^=5 或 (tags:flow)^=2
关于solr - 如何在 Solr 中进行常量分数查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4451593/