lucene中QueryParser操作符的疑惑

在测试Lucene搜索时,对于 AND 与 + 的区别研究了下

索引库中有四条记录,分别是

no:300900002071 name:情侣装*休闲女装 

no:300900002069 name:情侣装*休闲男装

no:400000480418 name:情侣完美坠

no:400000480155 name:天然翡翠项链

如果用以下字符串来搜索

(name:情侣) + (no:400000480155)

本来是想搜索出name中包含"情侣" 或 no为 400000480155  的记录,结果只有no为 400000480155的记录

如果改为

(name:情侣) AND (no:400000480155)

+(name:情侣) +(no:400000480155)

一条记录也没有

由这二组测试,可以看出AND与+,并不总是相等 (真是有点意外!)

如果改为

(name:情侣) OR (no:400000480155)

(name:情侣)  (no:400000480155)

结果正常,即同时搜索出name中包含"情侣",或no为400000480155的记录

从这里可以看出OR与空格,作用相同 

个人体会:

搜索时括号内的值,可以理解为一个变量,其前面可以加上"修饰"的操作符号: "+"或"-"号,表示必须包含,或不得包含

(name:情侣) + (no:400000480155) 与 (name:情侣) AND (no:400000480155)

 

为什么结果会不同?

对此又测试了一下

(no:400000480155) +(name:情侣) 这次的结果是只有name包含"情侣"的三条记录

(no:400000480155) AND (name:情侣) 仍然搜索不到记录

 

总结:

1。加号(+)和减号(-),仅仅只是对某单个查询条件的修饰,表示必须包含或不得包含

2。AND,OR, NOT才是表示多个文件之间的逻辑与,或,非

3。不用任何逻辑符号符(即AND,OR,NOT)时,多个条件放在一起,整个表达式的意义,就由带+号的条件共同决定(比如上面提到的 (no:400000480155) +(name:情侣) 和 (name:情侣) + (no:400000480155)),即(A +B +C最后就是相当于+B +C),如果多个条件前都没有修饰操作符(即+和-),则整个表达式的效果就是多个条件逻辑或(即A B 相当于A or B)

或者简单点说:

1、+是一元操作符,AND是二元操作符。

2、A +B, 意思就是A可有可无,但B一定要有。

3、A and B,意思是A 和B都要出现,即+A +B


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值