Apache Lucene 2.9的改进
数字的处理方式的支持,尤其是在范围查询(如“给我找出价格在0.5到9.99英镑之间的CD”)的场景下。在2.9版之前,Lucene的查询完全基于文本,因此对于数字的处理则变成了基于字符串的精确编码。这种做法经常会生成大量独立的关键字,Lucene需要通过遍历的方式来构建整个结果集。在此之前,许多开发人员使用了自定义的编码规则来应对这种情况,不过Lucene 2.9已经自带对数字的处理方式。Field和Query类会采取合适的精度进行索引和搜索,这样大大降低了需要搜索的关键字数量,使查询的响应能力得以显著提高。
在V2.9中,范围查询也有很大的变化,RangeQuery已经不推荐使用,使用TermRangeQuery和NumericRangeQuery两个替代。
TermRangeQuery:
NumericRangeQuery:该类还在测试实验中,在其api中,用红字标出:NOTE:
This API is experimental and might change in incompatible ways in the next release.
NumericRangeQuery:要使用它,首先要使用NumericField
给数字建索引(当然这个的term就是数字的了)。如果你的term是文本,那就是使用TermRangeQuery
。
新建NumericRangeQuery:
Query q = NumericRangeQuery.newFloatRange("weight", //field name
new Float(0.3f), //min 从它开始
new Float(0.10f),//max 到它结束
true, //是否包含min
true); //是否包含max
由于查询数字的term的时间相对更少,所以NumericRangeQuery的性能要比TermRangeQuery好(只对数的情况)。
For optimal performance, re-use the TokenStream and Field instance for more than one document:
NumericTokenStream stream = new NumericTokenStream(precisionStep);
Field field = new Field(name, stream);
field.setOmitNorms(true);
field.setOmitTermFreqAndPositions(true);
Document document = new Document();
document.add(field);
for(all documents) {
stream.setIntValue(value)
writer.addDocument(document);
}
This stream(NumericTokenStream ) is not intended to be used in analyzers; it's more for iterating the different precisions during indexing a specific numeric value.
分享到:
相关推荐
《Lucene2.9开发指南》是一份专为初级开发者准备的资料,旨在详细介绍如何使用开源全文搜索工具包Lucene2.9.1。Lucene作为一个强大的文本搜索库,其核心功能包括建立索引和执行搜索。以下是关于Lucene2.9开发的一些...
2. **查询(Query)**: `QueryParser`用于构建查询对象,它可以解析用户输入的查询字符串,并将其转化为Lucene能理解的查询表达式。常见的查询类型有:`TermQuery`(精确匹配)、`BooleanQuery`(布尔组合)、`...
lucene 2.9 API , lucene API,lucene 学习资料,lucene2.9 CHM
8. **扩展性**:Lucene 2.9 版本允许开发者自定义分析器、索引策略和查询解析器,以适应不同场景下的需求。这种灵活性使得 Lucene 能够广泛应用于各种信息检索系统,如网站搜索、企业内部文档检索等。 9. **稳定性...
首先,`QueryParser`将用户的查询字符串转换为`Query`对象,然后`Searcher`使用`Query`对象在索引中查找匹配的文档。`ScoreDoc`表示搜索结果中的一个条目,包含了文档ID和得分。 5. **过滤与排序** Lucene支持使用...
lucene_2.9_api
2. Query类:表示查询,例如TermQuery和BooleanQuery,它们定义了查询的逻辑结构。 总结,Lucene 2.9.1作为一个强大的全文搜索引擎,通过高效的索引结构和灵活的查询机制,为开发者提供了高效的信息检索能力。理解...
**Lucene.NET 2.9 搜索引擎源代码解析** Lucene.NET 是一个基于 Apache Lucene 的全文搜索引擎库,它是用 C# 实现的。Apache Lucene 是一个高性能、可扩展的信息检索库,广泛用于构建复杂的搜索功能。Lucene.NET ...
【Lucene.Net 2.9 库详解】 Lucene.Net是一个基于.NET框架的信息检索库,它是Apache Lucene项目的一部分,专为.NET开发者提供强大的全文搜索引擎功能。Lucene最初是用Java开发的,但随着.NET平台的发展,Lucene.Net...
《深入剖析Lucene.NET 2.9.4.2源码》 Lucene.NET是一个开源全文搜索引擎库,它是Apache Lucene项目的.NET版本。这个源码版是2.9.4.2版本,相较于2.9.4版进行了一些局部改进,以适应.NET平台的需求和优化。在本文中...
《深入理解Lucene.NET 2.9.4.2编译版》 Lucene.NET,作为.NET平台上的一款全文搜索引擎库,是Apache Lucene项目在Java平台上的移植,它为.NET开发者提供了强大的文本检索功能。本编译版为2.9.4.2,相较于2.9.4版...
在2.9版本中,Lucene.NET提供了稳定的性能和多种搜索特性,如布尔查询、短语查询、模糊查询等。 **Highlighter插件** Highlighter是Lucene中一个重要的组件,主要用于在搜索结果中高亮显示匹配的关键词。它通过...
在上面的代码中,`DateTools.DateToString`方法将DateTime对象转换为Lucene可理解的字符串格式,然后创建了一个包含这两个时间点的闭合范围查询。这里的“true”参数表示边界是包含的。 接下来,我们需要将这个...
- **RangeQuery**:用于指定一个范围内的查询,如年龄、日期等,可以设置是否包含边界。可以使用TermRangeQuery类创建或通过QueryParser解析包含边界符号的字符串。 - **BooleanQuery**:用于组合多个查询条件,...
Lucene 2.9.4提供了丰富的查询语法,包括布尔查询、短语查询、范围查询等,可以满足复杂的搜索需求。查询解析器(QueryParser)将用户的输入转换为内部表示,然后执行搜索。搜索过程涉及对倒排索引的查找,找到与...
《深入理解Lucene.NET 2.9.1.002:C#版搜索引擎核心技术剖析》 Lucene.NET,作为Apache Lucene项目的一部分,是一款高度可扩展、高性能的全文检索库,专为.NET Framework设计。它提供了核心的索引和搜索功能,为...
Version 2.9.2 本人倡导零分资源共享,欢迎大家按需下载。
- **范围查询 (Range Query)**:指定一个范围,如`date:[2020 TO 2022]`,找出日期在2020年至2022年之间的文档。 ### 2. 操作符与逻辑查询 Lucene支持以下操作符来进行逻辑组合: - **AND (默认操作)**:默认情况...
Lucene支持这种多字段查询,你可以通过构建复杂的Query对象来实现。例如,可以创建一个BooleanQuery,将各个字段的Query子句以AND、OR或NOT的关系组合起来。此外,还可以使用MultiFieldQueryParser,它允许指定一组...
在Lucene中,表达式查询是一种高级查询方式,允许用户通过特定的语法构造复杂的查询条件。本篇文章将深入探讨Lucene表达式处理查询的原理、语法及示例。 ### 1. Lucene表达式查询基础 Lucene表达式查询是基于...