TermQuery
首先介绍最基本的查询,如果你想执行一个这样的查询:“在content域中包含‘lucene’的document”,那么你可以用TermQuery:
Term t = new Term("content", " lucene");
Query query = new TermQuery(t);
BooleanQuery
如果你想这么查询:“在content域中包含java或perl的document”,那么你可以建立两个TermQuery并把它们用BooleanQuery连接起来:
TermQuery termQuery1 = new TermQuery(new Term("content", "java");
TermQuery termQuery 2 = new TermQuery(new Term("content", "perl");
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(termQuery 1, BooleanClause.Occur.SHOULD);
booleanQuery.add(termQuery 2, BooleanClause.Occur.SHOULD);
PhraseQuery
你可能对中日关系比较感兴趣,想查找‘中’和‘日’挨得比较近(5个字的距离内)的文章,超过这个距离的不予考虑,你可以:
PhraseQuery query = new PhraseQuery();
query.setSlop(5);
query.add(new Term("content ", “中”));
query.add(new Term(“content”, “日”));
那么它可能搜到“中日合作……”、“中方和日方……”,但是搜不到“中国某高层领导说日本欠扁”。
注意:此query刚开始测试的时候,没有成功,原因在于必须保证搜索的term在分词当中存在,如果搜索一个不存在的词,肯定是没戏的。
DisjunctionMaxQuery
If the query is "albino elephant" this ensures that "albino" matching one field and "elephant" matching another gets a higher score than "albino" matching both fields.
提供了针对某个短语的最大score。这一点对多字段的搜索非常有用
A query that generates the union of documents produced by its subqueries
This is useful when searching for a word in multiple fields with different boost factors
DisjunctionMaxQuery(Collection<Query> disjuncts, float tieBreakerMultiplier)
Creates a new DisjunctionMaxQuery
DisjunctionMaxQuery(float tieBreakerMultiplier)
Creates a new empty DisjunctionMaxQuery.
参数float tieBreakerMultiplier:
the score of each non-maximum disjunct for a document is multiplied by this weight and added into the final score. If non-zero, the value should be small, on the order of 0.1。。。
void add(Collection<Query> disjuncts)
Add a collection of disjuncts to this disjunction via Iterable
void add(Query query)
Add a subquery to this disjunction
观察其构造函数以及两个add方法,就能明白大致的用法
FilteredQuery
A query that applies a filter to the results of another query
Filter filter = new DateFilter(FieldDate, DateTime.Parse("2005-10-10"), DateTime.Parse("2005-10-15"));
Query query = QueryParser.Parse("name*", FieldName, analyzer);
query = new FilteredQuery(query, filter);
从代码可以看出FilteredQuery是在已经定义好的query上附加了过滤器;但是过滤器不影响文档的打分,打分的时候,FilterQuery只考虑query的部分,不考虑filter的部分
FilteredQuery还可以进行多条件的过滤
Filter filter = new DateFilter(FieldDate, DateTime.Parse("2005-10-10"), DateTime.Parse("2005-10-15"));
Filter filter2 = new RangeFilter(FieldNumber, NumberTools.LongToString(11L), NumberTools.LongToString(13L), true, true);
Query query = QueryParser.Parse("name*", FieldName, analyzer);
query = new FilteredQuery(query, filter);
query = new FilteredQuery(query, filter2);
IndexSearcher searcher = new IndexSearcher(reader);
Hits hits = searcher.Search(query);
MatchAllDocsQuery
A query that matches all documents.用来匹配所有文档
构造一个没有任何条件的query,用于返回所有的文档
分享到:
相关推荐
在本文中,我们将深入探讨如何使用Lucene查询工具类和`IndexSearcher`进行分页查询,这在处理大量数据时尤其有用。Lucene是一个强大的全文搜索引擎库,它提供了高效、可扩展的文本检索功能。在Java开发环境中,...
**Lucene查询语法详解** Apache Lucene是一款高性能、全文本搜索库,被广泛应用于各种搜索引擎的构建。在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更...
这篇博客文章“对内存中Lucene查询的集合进行分页”探讨的是如何在处理大量数据时,有效地对Lucene查询结果进行分页显示,以提高用户体验并减轻服务器负担。 首先,理解Lucene的基本工作原理至关重要。Lucene通过...
Lucene Query Tool (lqt) 是一个命令行工具用来执行 Lucene 查询并对结果进行格式化输出。 使用方法: $ ./lqt usage: LuceneQueryTool [options] --analyzer <arg> for query, (KeywordAnalyzer | ...
### Lucene查询语法详解 #### 一、Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于各种需要实现全文检索的应用场景之中。Lucene支持复杂的查询语法,能够灵活地处理多样化的查询需求,使得...
根据提供的标题、描述、标签及部分内容,我们可以提炼出与Lucene查询学习相关的知识点。下面将对这些知识点进行详细的阐述。 ### Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它...
在lucene搜索分页过程中,可以有两种方式 一种是将搜索结果集直接放到session中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样...
本篇文章将详细阐述如何使用Lucene来创建和查询索引,帮助你深入理解其核心概念和操作流程。 ### 1. Lucene基本概念 - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段...
lucene 做索引查询流程,来自《lucene in action》
Lucene查询字符串生成器 使用小型纯函数轻松构建您的Lucene字符串查询。 想象一下,有一个利用Lucene在(索引的)数据库上执行查询的API。 在这种情况下,您可能希望在客户端/前端上生成lucene查询字符串。 用法...
Lucene查询解析器 Lucene查询字符串解析器,用作Web api查询或过滤器字符串。 基本代码来自 使用这种语言的示例查询: name: apple price: > 100 price: > 100 AND active: = 1 product.price: > 100 AND ...
**组合条件查询**是Lucene查询的强大之处。你可以使用`BooleanQuery`来构造复杂的布尔逻辑,比如AND、OR、NOT操作。例如,可以创建两个`Query`对象,一个用于匹配关键词,另一个用于时间范围,然后通过`...
3. **查询解析**: 后端服务接收到查询后,使用 QueryParser 将查询字符串解析为 Lucene 查询对象。 4. **执行搜索**: 使用 Searcher 执行查询,获取匹配的文档。 5. **返回结果**: 将搜索结果的文档得分、标题等信息...
学习如何解析用户输入的查询并转化为Lucene查询对象,以及如何使用Searcher执行查询。 4. **结果排序与优化:** Lucene提供了一种叫做TF-IDF的评分机制来决定搜索结果的相关性。了解如何自定义评分函数以满足特定...
1. **查询解析**:用户输入的查询字符串需要通过 QueryParser 或 MultiFieldQueryParser 转换为 Lucene 查询对象。这些解析器会处理语法,识别短语、布尔运算符、通配符等。 2. **搜索执行**:使用 IndexSearcher ...
2. **查询解析**:Lucene 提供了查询解析器,可以将用户的输入转换为索引理解的查询表达式,支持布尔运算、短语查询、近似查询等多种复杂查询模式。 3. **搜索执行**:基于倒排索引,Lucene 可以快速找到包含查询词...
3. **查询解析**: 用户输入的查询字符串会被转换为Lucene查询语法,QueryParser类负责这个过程。它可以处理各种查询类型,如布尔查询、短语查询、前缀查询等。 4. **文档检索**: 使用IndexReader和IndexSearcher类...
2. **查询处理**:用户输入查询字符串,查询解析器将它转化为 Lucene 查询对象。 3. **评分与排序**:搜索器根据查询对象和索引进行匹配,计算每个匹配文档的相关性分数,如 TF-IDF。 4. **结果返回**:按相关性...
5. **查询解析**:用户输入的查询需要被解析成Lucene可以理解的格式。这可能涉及到查询分析,比如同义词扩展、短语匹配等。 6. **搜索执行**:通过Lucene的Query类构建查询对象,然后使用IndexSearcher进行搜索。...
查询解析器(QueryParser)将用户的查询字符串转换成Lucene查询对象。它处理查询语法,支持布尔运算符、通配符、短语搜索等。 ## 3. Lucene实战 在实际项目中,开发者通常需要自定义分析器以适应特定的语言或领域...