假设我有一个由许多子句组成的复杂查询。
查询子句可以分为" strict"条款和"一般搜索",不太重要的条款。
我想知道,在不依赖相关性得分的情况下,哪些文档与严格部分完全匹配,即哪个文档符合所有确切要求,哪些文档因一般搜索而被视为匹配。
一个例子"严格"查询的一部分 -
+((+field1.subf1:val1 ConstantScore(field1.subf2.subf3.subf4:"[* TO *]" field1.subf2.subf5:true))^10.0) ((title:"Lorem ipsum dolor sit amet")^0.05) (#((+field1.subf1:val1 ConstantScore(field1.subf2.subf3.subf4:"[* TO *]" field1.subf2.subf5:true))~100^10.0))
在Elasticsearch中,named queries允许我标记strict子句,然后验证每个命中符合哪个子句。
如何在Solr中完成此操作?
非常感谢, 罗恩
{P.S。 - 我使用solr 5.3.1和solrj}
答案 0 :(得分:2)
我当前的解决方案(希望获得反馈和理智检查)
如果是“严格”,要决定每次点击,我会执行以下操作:
按原样执行完整查询
同时,使用包含strict子句( fq = $ {strict_cluases} )的已添加过滤器字段执行相同的查询,仅检索文档ID( fl =“ ID“)
运行两个不同的查询并比较它们会导致两个结果集过于分离的风险(从而使得比较没有实际意义),但我相信它们可以通过具有相同分数,开始和放大来减轻它们。行参数。
答案 1 :(得分:0)
最佳选择:
这是一个已知的Solr问题,如果你环顾四周,你会发现已经进行过这种解析的工具(虽然可能不适合你的语言等):
编辑:让我提出一个你可能尝试的完全不同的方法:
根本不要使用debugQuery,对于您需要处理的少数顶级文档,请执行以下操作:
也许这比使用debugQuery更快......
答案 2 :(得分:0)