我的solr实现有类似这样的查询
q =(field1:ipod和field2:black)OR(field3:' apple computers')或(field4:working)
这里基本上有3个条件由' OR'分隔。当我运行此查询时,我得到结果。在结果中,我想看看满足3个条件中的哪一个。例如,除了返回的数据(自定义字段)之外的结果中,特别是我希望每个返回的文档都有cond1 = true,cond2 = true,cond3 = false。
假设没有对这些字段(1到4)进行分析。所有字段都是字符串。 Solr 4.6.1。分布。
尝试了解决方案(但没有令人满意的结果):
这里有其他选择解决方案吗?我应该在这里写自定义相似性或自定义Doc变换器吗?
答案 0 :(得分:0)
从https://cwiki.apache.org/confluence/display/solr/Function+Queries
中提示您可以在查询中使用以下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
只是别名。
顺便说一句,既然你提到所有的字段都是字符串,那么你需要在任何地方都进行完全匹配。