这是Lucen In Action一书中1.6 节的全部内容。
理解核心的Searching类
■ IndexSearcher
■ Term
■ Query
■ TermQuery
■ Hits
IndexSearcher 能够搜索IndexWriter索引的东西(即,index):Index暴露的几个搜索方法的核心连接。可以把它看作以只读方式打开索引的类。它提供了一组Search方法,有些是在它的抽象父类Searcher中实现的;最简单的Search方法只有一个Query参数,返回Hits对象。一个典型的应用:
IndexSearcher is = new IndexSearcher(
FSDirectory.getDirectory("/tmp/index", false));
Query q = new TermQuery(new Term("contents", "lucene"));
Hits hits = is.search(q);
在第三章有IndexSearcher的整体描述,在五,六章可以看到它更高级的特性
注:可以对比IndexWriter
Term
Term是搜索的基本单元。和Field类似它由一对字符串元素组成:field name,field value。
注意,Term对象在indexing 过程中也有涉及,那时他们被创建,然而那是在Lucene的内部,因此通常你并不需要在Indexing时考虑他们。在搜索中,你可以构造Term对象,并且和TermQuery一起使用:
Query q = new TermQuery(new Term("contents", "lucene"));
Hits hits = is.search(q);
这段代码使Lucene在所有文档中查找位于“contents”field中的“Lucene”单词。因为TermQuery对象是从Query抽象类派生的,你可以使用在语句的左边使用Query类型。(多态)
Query
Lucene提供了Query,随之提供的还有Query的许多子类。到本章为止,我们只涉及到了最基本的LuceneQuery:TermQuery。其他的Query类型有:BooleanQuery, PhraseQuery, PrefixQuery, PhrasePrefixQuery, RangeQuery,FilteredQuery, 和 SpanQuery.
第三章能讲到他们。Query是通用的抽象基类,包含几个有用的方法,最重要的是setBoost(float),将在3.5.9描述
TermQuery
TermQuery是Lucene支持的最基本的Query类型,并且它是基本的(primitive)的查询类型之一。它被用来匹配包含指定fields值的文档,正像你在最近几段看到的那样。
Hits
Hits 类是一个简单的排列了(ranked)搜索结果的指针容器,这些搜索结果是匹配指定Query的文档。由于性能原因,Hits实例没有从索引中加载所有匹配的文档,一次仅加载他们的一小部分。第三章有更详细的信息
原文:
IndexSearcher
IndexSearcher is to searching what IndexWriter is to indexing: the central link to
the index that exposes several search methods. You can think of IndexSearcher
as a class that opens an index in a read-only mode. It offers a number of search
methods, some of which are implemented in its abstract parent class Searcher;
the simplest takes a single Query object as a parameter and returns a Hits object.
A typical use of this method looks like this:
IndexSearcher is = new IndexSearcher(
FSDirectory.getDirectory("/tmp/index", false));
Query q = new TermQuery(new Term("contents", "lucene"));
Hits hits = is.search(q);
We cover the details of IndexSearcher in chapter 3, along with more advanced
information in chapters 5 and 6.
Term
A Term is the basic unit for searching. Similar to the Field object, it consists of a
pair of string elements: the name of the field and the value of that field. Note
that Term objects are also involved in the indexing process. However, they’re created
by Lucene’s internals, so you typically don’t need to think about them while
indexing. During searching, you may construct Term objects and use them
together with TermQuery:
Query q = new TermQuery(new Term("contents", "lucene"));
Hits hits = is.search(q);
This code instructs Lucene to find all documents that contain the word lucene in
a field named contents. Because the TermQuery object is derived from the abstract
parent class Query, you can use the Query type on the left side of the statement.
Query
Lucene comes with a number of concrete Query subclasses. So far in this chapter
we’ve mentioned only the most basic Lucene Query: TermQuery. Other Query types
are BooleanQuery, PhraseQuery, PrefixQuery, PhrasePrefixQuery, RangeQuery,
FilteredQuery, and SpanQuery. All of these are covered in chapter 3. Query is the
common, abstract parent class. It contains several utility methods, the most
interesting of which is setBoost(float), described in section 3.5.9.
TermQuery
TermQuery is the most basic type of query supported by Lucene, and it’s one of
the primitive query types. It’s used for matching documents that contain fields
with specific values, as you’ve seen in the last few paragraphs.
Hits
The Hits class is a simple container of pointers to ranked search results—documents
that match a given query. For performance reasons, Hits instances don’t
load from the index all documents that match a query, but only a small portion
of them at a time. Chapter 3 describes this in more detail
分享到:
相关推荐
《深入理解Lucene:搜索引擎核心技术解析》 Lucene是一个全文搜索引擎库,由Apache软件基金会开发并维护,它提供了高效的文本检索、分析和存储功能。在Java编程语言中,Lucene被广泛应用于各种需要全文搜索功能的...
这个“lucene 小资源”可能包含了作者在学习和使用Lucene过程中积累的一些资料和经验,对于初学者或者想要深入理解Lucene的人来说,是非常宝贵的资源。 Lucene的核心功能包括文档索引、搜索以及相关的文本处理。它...
这个源代码版本代表了Lucene 3.x系列的最后一个稳定版本,为开发者提供了深入理解Lucene内部机制的宝贵资源。下面将详细探讨Lucene 3.6.2中的关键知识点。 1. **分词器(Tokenizers)**: Lucene的核心功能之一是...
通过这个"lucene实例",你可以学习如何配置和使用Lucene,理解其核心机制,并将其应用于实际项目中。如果你对压缩包内的文件进行解压并运行,你将看到具体的操作步骤和示例代码,帮助你更好地理解和掌握Lucene。
**全文检索引擎Lucene** Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它是Java语言编写,提供高性能、可扩展的...这将帮助你更好地理解Lucene的工作原理,从而在实际项目中灵活运用全文检索技术。
#### 三、Lucene核心技术详解 ##### 1. 索引构建(Indexing) - **文档添加**:如何向索引中添加文档,并设置各个字段的存储方式。 - **分析过程**:深入理解分析器的工作原理,包括不同的分析策略,如标准分析器、...
**Lucene 的核心组件** 1. **索引(Indexing)**: Lucene 首先需要对数据进行索引,这个过程会将文本数据转换为倒排索引结构。倒排索引允许快速查找包含特定单词或短语的文档。 2. **文档(Documents)**: 在 ...
这个资料集可能包含了关于如何理解和使用Lucene的各种资源,特别是通过博主huanglz19871030在iteye上的博客文章链接,可以深入学习Lucene的核心概念和技术细节。 【标签】:“源码”和“工具”这两个标签暗示了这个...
**Lucene jar包详解** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。这个"lucene_jar包"包含了Lucene...通过深入理解和熟练使用Lucene,可以提升应用的用户体验,实现更智能、更快速的信息查找。
《深入理解Lucene.Net 2.0:源码与文档解析》 Lucene.Net是一个开源的全文搜索引擎库,它是Apache Lucene项目在.NET平台上的实现,由DotLucene发展而来,广泛应用于各种信息检索和文本挖掘场景。这个资料包包含了...
Lucene 的主要组成部分包括索引(Indexing)、查询解析(Query Parsing)和搜索(Searching)等。 - **索引**:Lucene 的索引过程是将非结构化的文本数据转换为倒排索引(Inverted Index)的过程。倒排索引是一种...
5. 搜索(Searching):Searcher类执行查询操作,返回匹配的文档集合。它会计算每个文档的相关度分数,并按分数排序。 6. 高级特性:除了基本的搜索功能,Lucene还提供了高级特性,如faceted search(分面搜索)、...
1. **Lucene Core**: 这是Lucene的核心库,包含了索引和搜索的基本功能。例如,`IndexWriter`用于创建和更新索引,`Directory`用于存储索引,`Analyzer`处理文本分词,`QueryParser`解析查询语句,以及`...
《Lucene.NET 1.4.3全文...通过理解其核心概念和工作流程,开发者可以充分利用这一框架,提升应用的搜索体验。在实际项目中,根据具体需求选择合适的Analyzer,优化查询策略,都能进一步提升Lucene.NET的性能和实用性。
3. 查询(Query):用户输入的搜索条件被转换为Lucene理解的查询对象,如TermQuery、BooleanQuery等。 4. 搜索(Searching):使用查询对象在索引中查找匹配的文档,并返回结果集。 5. 排序与评分(Sorting & ...
3.2 索引过程:通过`IndexWriter`进行索引创建和更新,涉及`Term`, `TermInfo`, `TermEnum`等类,理解这些类的工作原理对于优化索引性能至关重要。 3.3 查询过程:`QueryParser`解析用户输入的查询,生成`Query`...
通过对这些代码的学习,你可以深入理解Lucene的工作原理,并将其应用于实际项目中。在进行修改时,需要注意调整索引路径、Analyzer设置以及查询参数,以满足你的特定需求。 总的来说,Lucene项目案例提供了一个很好...
Lucene 3.5主要包含以下几个核心组件:索引(Indexing)、搜索(Searching)、分析(Analyzer)和查询解析(Query Parser)。这些组件协同工作,使得Lucene能够高效地处理海量文本数据,实现快速检索。 二、索引...
5. **倒排索引(Inverted Index)**: Lucene的核心数据结构,它将每个词对应的一组文档ID存储起来,用于快速找到包含特定词的文档。 ### 二、Lucene工作流程 1. **创建索引(Indexing)**: 遍历要搜索的文档,使用...