在测试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
分享到:
相关推荐
Lucene支持多种布尔操作符,包括`AND`、`OR`、`NOT`以及`+`和`-`,这些操作符允许用户构建复杂的查询表达式,以精确地定位所需信息。 - **AND**:确保所有关键词同时出现在搜索结果中。例如,“Java AND Lucene”将...
它支持多种查询语法,如布尔操作符、短语查询、范围查询等。 5. **lucene-memory-4.7.0.jar**:这个模块提供了在内存中构建和搜索索引的功能,适合小规模数据或者临时性的搜索需求。内存索引虽然速度快,但不适合...
2. **查询解析**:Lucene 包含一个强大的查询解析器,可以处理各种查询语法,如布尔逻辑操作符(AND, OR, NOT)、短语查询、近似查询、评分等。用户可以通过QueryParser类来解析查询字符串,并生成对应的Query对象。...
Lucene的`QueryParser`类可以帮助我们构建查询语句,匹配用户输入的关键词。最后,通过`IndexSearcher`获取匹配的文档并返回结果。 5. **文件操作** 在本例中,"ikTest"可能是一个测试目录或文件,用于存放索引...
5. 高级查询构造(Advanced Query Building):支持布尔操作符、短语查询、范围查询等多种复杂查询。 6. 更新与删除(Updating & Deleting):Lucene允许对已有索引进行更新或删除操作,确保数据实时性。 通过以上...
- `TermsQueryParserDemo.java`:展示如何使用QueryParser来创建Term查询,以及如何应用布尔操作符和分组。 通过深入理解QueryParser的语法和用法,开发者可以构建出更符合用户需求的查询接口,提供更精准的搜索...
在"Lucene5.3.1相关jar包"中,这些jar文件通常包含了Lucene的核心组件、模块和必要的依赖,以便开发者能够直接在项目中引入并使用Lucene的功能。 中文分词器是Lucene针对中文文本处理的重要组成部分。由于中文句子...
在这个“Lucene全文检索的各种例子”中,我们将探讨如何使用不同的分词器,如ikAnalyzer和smartChineseAnalyzer,来实现中文文本的索引和搜索。 首先,让我们深入理解一下Lucene。Lucene的核心功能包括文档的索引和...
源码会展示如何自定义查询解析规则,如短语匹配、布尔操作符和通配符查询。 3. **搜索执行**:`Searcher`接口和它的实现类如`IndexSearcher`用于执行搜索。通过`ScoreDoc`和`TopDocs`,你可以了解如何获取最相关的...
5. **QueryParser**:Lucene提供了一个强大的查询解析器,能够将用户的查询字符串转化为内部表示,支持各种查询语法,如布尔操作符(AND、OR、NOT)、短语查询、范围查询等。 6. **索引优化(Merge)**:为了提高...
6. **查询语法与Query对象**:Lucene支持布尔操作符(AND, OR, NOT)和短语查询,以及评分机制。Query对象包括TermQuery(单个词元查询)、BooleanQuery(布尔组合查询)、PhraseQuery(短语查询)等,它们在查询...
6. **高级搜索**:除了基本的关键词搜索,Lucene还支持布尔操作符(AND, OR, NOT)、短语搜索、近似搜索、范围搜索等多种复杂的查询模式。 7. **工具类**:在标签中提到的"工具",可能指的是Lucene提供的各种工具类...
源码展示了如何处理布尔操作符、短语查询、字段限制等复杂查询结构。 3. **搜索执行**:`IndexSearcher` 类负责执行搜索,它使用 `Analyzer` 进行查询分析,然后调用 `IndexReader` 从索引中获取匹配的文档。 4. *...
3. **查询解析**:Lucene的QueryParser类将用户输入的查询字符串转化为内部表示,支持布尔操作符、短语匹配等多种查询语法。 4. **搜索执行**:Searcher类负责执行查询并返回结果。它使用Scorer和Collector组件来...
1. **布尔查询(Boolean Queries)**:支持 AND、OR、NOT 等逻辑操作符,组合多个查询条件。 2. **短语查询(Phrase Queries)**:查找特定顺序的多个术语,如 "大数据技术"。 3. **模糊查询(Fuzzy Queries)**:...
QueryParser可以解析用户输入的查询字符串,自动处理布尔操作符(AND、OR、NOT)。例如,对于查询“苹果 iPhone”,QueryParser会理解为“苹果” AND “iPhone”。 ```csharp var parser = new ...
- **布尔查询(Boolean Query)**: 支持AND、OR、NOT等逻辑操作符组合多个查询条件。 - **短语查询(Phrase Query)**: 查找连续出现的多个词,常用于精确匹配。 - **前缀查询(Prefix Query)**: 查找以指定词汇...
- **复杂查询构造**:除了基本查询外,还可以使用布尔操作符组合多个查询,创建复杂的查询表达式。 - **过滤器与筛选**:Filter类用于限制搜索结果,如按日期、地理位置等条件筛选。 7. **优化与维护** Lucene提供...
对于查询,Lucene.Net提供了一个强大的QueryParser,可以解析用户的查询字符串,生成相应的Query对象。然后,使用Searcher执行查询,获取匹配的文档。Searcher还可以进行排序、高亮显示等高级操作。 为了提高性能和...
查询可以包含简单的关键词、布尔操作符(AND、OR、NOT)以及短语查询。高级查询语法还包括字段限制、通配符查询、前缀查询和模糊查询。 四、搜索优化 1. **评分机制**:Lucene使用TF-IDF算法计算文档与查询的...