小议lucene搜索表达式中的AND和OR以及+和空格

来源:互联网 发布:2016cctv网络春晚 编辑:程序博客网 时间:2024/06/05 04:16

在构造搜索表达式的时候你可以使用+(与AND相当,当不完全相同) 和空格(与OR相当),也可以使用AND和OR,
当然也可以都混在一起,个人感觉最好不要

构造复杂的表达式的时候千万要注意,特别是使用AND OR的时候,搜索引擎解析表达式的时候并非按照常规的
先AND后OR
比如
tag:a AND  tag:b  OR  title:a  AND  title:b 初看下来以为这个表达式与下面的等价
(tag:a AND  tag:b ) OR  (title:a  AND  title:b)
其实不是 tag:a AND  tag:b  OR  title:a  AND  title:b  与+tag:a +tag:b  + title:a  +title:b等价,也就是与下面的表达式等价:
tag:a AND  tag:b  AND title:a  AND  title:b,所以你必须得加上括号

我倾向使用+和空格的组合,至少看上去更简单
上面的例子表示成(+tag:a +tag:b )( +title:a  +title:b)

请注意+tag:a +tag:b和tag:a +tag:b的区别:
tag:a +tag:b其实与tag:b或者+tag:b等价,你可以认为+是必须有的意思,没有+就是可有可无的意思,
所以通常一个独立的+没什么意思,多个+同时出现就和AND意义相当了

另外: a AND b OR c 也并不是你想的那个意思,a AND b OR c===> +a +b c====> a AND b

为了达到效果你不得不写成( a AND b) OR c


原创粉丝点击