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)
- 初探css3
- QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码
- 如何找出被黑客攻击后篡改的WordPress 文件?
- 移动设备HTML5页面布局
- Foundation:高级的响应式前端框架
- [信息安全] 2.密码工具箱(续)
- 脑科学发展的助推器
- BFIThumb:WordPress 中替代TimThumb 进行裁图的选择
- jquery 操作ajax 相关方法
- SQL SERVER 2008 Hierarchyid数据类型
- Html5 学习利器 Web Standards Update for Microsoft Visual Studio 2010 SP1
- MongoDB 客户端 MongoVue
- HttpClient介绍
- 10个使用 Foundation 框架开发的WordPress 主题推荐
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法