Solr:如何标记结果中匹配的查询条件

Solr:如何标记结果中匹配的查询条件,solr,lucene,solr4,Solr,Lucene,Solr4,我的solr实现有这样的查询 q=field1:ipod和field2:black或field3:apple computers或field4:working 这里基本上有3个条件,用“或”分隔。当我运行这个查询时,我会得到结果。在结果中,我想看看这3个条件中哪一个得到了满足。例如,在结果中,除了返回的数据自定义字段外,我特别希望返回的每个文档都有cond1=true、cond2=true、cond3=false 假设不会对这些字段1至4进行分析。所有字段都是字符串。Solr 4.6.1。分发

我的solr实现有这样的查询

q=field1:ipod和field2:black或field3:apple computers或field4:working

这里基本上有3个条件,用“或”分隔。当我运行这个查询时,我会得到结果。在结果中,我想看看这3个条件中哪一个得到了满足。例如,在结果中,除了返回的数据自定义字段外,我特别希望返回的每个文档都有cond1=true、cond2=true、cond3=false

假设不会对这些字段1至4进行分析。所有字段都是字符串。Solr 4.6.1。分发

已尝试解决方案,但没有令人满意的结果:

debugquery=true似乎给出了太多详细的信息 领域,我不感兴趣,我在寻找简单的领域 待补充。我可以对这些调试xml进行分析,但是 对正常处理来说很复杂。 group by group.query选项将通过在group.query中提供条件来帮助我们按条件进行分组,这不是我的最佳选项,只是尝试了一下。但它在分布式模式SOLR-5046中似乎不起作用 添加字段函数查询,无法执行简单的字段到字符串的相等性检查,如_cond1 1;:iffield1=='ipod'和field2=='black'。我想在函数查询中不可能有这样的相等性检查。 这里还有其他的解决方案吗?我应该在这里写自定义相似性还是自定义文档转换器?

您可以在查询中使用以下fl参数:

fl=*,firstmatch:if(and(termfreq(field1,'ipod'),termfreq(field2,'black')),1,0),
secondmatch:if(termfreq(field3,'apple computer')),1,0),
thirdmatch:if(termfreq(field4,'working'),1,0)
新行只是为了清楚起见

这将为您提供三个字段,其中1或0表示匹配项

基本思想是您可以使用fl字段中的函数查询来获得特定的值。名字firstmatch、secondmatch和thirdmatch只是别名


顺便说一句,因为您提到所有字段都是字符串,所以您需要在所有位置进行精确匹配。

可能重复的字段您知道在termfreq fq中使用通配符的方法吗?所以你可以用termfreqtext,manage*来匹配Manager,manage和Management?