如何在Solr中进行恒定分数查询
-
10-10-2019 - |
题
我正在使用Solrnet访问SOLR索引,其中我拥有一个称为“ TAGS”的多价字段。我想执行以下伪代码查询:
(标签:堆栈)^10或(标签:over)^5或(标签:flow)^2
如果“堆栈”一词被10增强“堆叠”,那么“堆叠”被5和“流”增强了2。流”,等等
我遇到的问题是“流”仅出现在几个文档中,但是“堆栈”出现在负载中,然后由于IDF值高,带有“流”的文档出现在带有“堆栈”的文档上方。
当该项目在Lucene直接实施时,我使用了ConstantsCoreQuery,这些项目仅根据增强值消除了IDF。
Solr和Solrnet如何实现这一目标,在这里我只是通过Solr查询字符串?如果不能,我可以解决这个问题吗?
提前致谢!
解决方案
我认为没有任何方法可以直接在Solr中表达ConstantsCoreQuery,但似乎 范围和前缀查询在引擎盖下使用常量, ,因此您可以尝试伪造范围查询,例如 tags:[flow TO flow]
另外,您可以实现自己的Solr QueryParser。
其他提示
Solr 5.1及以后通过 ^= operator在查询解析器语法中内置。
因此,只需获取您的原始查询:(标签:stack)^10或(tags:Over)^5或(标签:flow)^2
并用^=替换^=从增强变为常数:( tags:stack)^= 10或(tags:off)^= 5或(tags:flow)^= 2
不隶属于 StackOverflow