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