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

时间:2014-10-27 18:50:29

标签: solr lucene solr4

我的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。分布。

尝试了解决方案(但没有令人满意的结果):

  1. debugquery = true似乎提供了太多详细信息(解释 我不感兴趣,我正在寻找简单的领域 待补充。我可以将这些调试xml-ized用于解析,但是 复杂的正常处理。
  2. group by(group.query)选项可以通过在group.query中提供条件来帮助我们按条件分组,这不是我的最佳选择,只是尝试了它。但它似乎不适用于分布式模式(SOLR-5046)
  3. 添加字段函数查询,无法对字符串相等性检查执行简单字段,如_cond1_:if(field1 ==' ipod' and field2 ==' black')。我想在函数查询中没有这样的等式检查。
  4. 这里有其他选择解决方案吗?我应该在这里写自定义相似性或自定义Doc变换器吗?

1 个答案:

答案 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字段中使用函数查询来获取特定值。名称firstmatchsecondmatchthirdmatch只是别名。

顺便说一句,既然你提到所有的字段都是字符串,那么你需要在任何地方都进行完全匹配。