前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Lucene:QueryParser中操作符的疑惑

Lucene:QueryParser中操作符的疑惑

作者头像
菩提树下的杨过
发布2018-01-22 20:14:00
1K0
发布2018-01-22 20:14:00
举报

晚上在测试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)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2008-01-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档