可以在solr中使用括号

时间:2016-11-30 17:23:06

标签: solr lucene

我是solbie的新手,我想知道是否可以使用这样的括号:
如果我想搜索field1:val1 NOT field2:val2 NOT field3:val3,我可以这样做:field1:val1 NOT (field2:val2 AND field3:val3) 我看到在doc中有类似的东西,但它并不完全符合我的需要

2 个答案:

答案 0 :(得分:1)

,lucene查询允许在查询中使用括号,并且您提供的语法完全有效。

但是,,这两个查询将得不到相同的结果。但这并不是一些Lucene的怪癖,这两个查询在逻辑上并不相同。根据{{​​3}}:不是AND而不是b = NOT(a OR b)

field1:val1 NOT field2:val2 NOT field3:val3相当于field1:val1 NOT (field2:val2 OR field3:val3)。这些将返回包含" val1"的结果,但不包括" val2"或" val3"

field1:val1 NOT (field2:val2 AND field3:val3)会返回包含" val1"和的结果" val2"和" val3"。结果可能存在,但不是两者都存在。

答案 1 :(得分:0)

您可以使用-来实现这一目标。

e.g

/select?q=field1:val1&fq=-field2:val2&fq=-field3:val3

您可以根据需要添加任意数量的过滤查询(fq)。

所以基本上q将返回所有拥有field with value val1的文档,然后过滤器查询(fq)将过滤掉结果,以便返回的唯一文档没有field2值val2和field3的值为val3