`
zhangde
  • 浏览: 20364 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

lucene 查询

阅读更多

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,用于返回所有的文档

 

分享到:
评论
1 楼 topcat 2011-04-01  
朋友,能不能进一步的解释一下DisjunctionMaxQuery?

相关推荐

    lucene查询工具类和IndexSearcher分页查询示例

    在本文中,我们将深入探讨如何使用Lucene查询工具类和`IndexSearcher`进行分页查询,这在处理大量数据时尤其有用。Lucene是一个强大的全文搜索引擎库,它提供了高效、可扩展的文本检索功能。在Java开发环境中,...

    lucene的查询语法事例

    **Lucene查询语法详解** Apache Lucene是一款高性能、全文本搜索库,被广泛应用于各种搜索引擎的构建。在使用Lucene进行信息检索时,理解和掌握其查询语法至关重要。本篇文章将深入探讨Lucene的查询语法,帮助你更...

    对内存中Lucene查询的集合进行分页

    这篇博客文章“对内存中Lucene查询的集合进行分页”探讨的是如何在处理大量数据时,有效地对Lucene查询结果进行分页显示,以提高用户体验并减轻服务器负担。 首先,理解Lucene的基本工作原理至关重要。Lucene通过...

    Lucene查询工具LQT.zip

    Lucene Query Tool (lqt) 是一个命令行工具用来执行 Lucene 查询并对结果进行格式化输出。 使用方法: $ ./lqt usage: LuceneQueryTool [options] --analyzer &lt;arg&gt; for query, (KeywordAnalyzer | ...

    Lucene查询语法

    ### Lucene查询语法详解 #### 一、Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于各种需要实现全文检索的应用场景之中。Lucene支持复杂的查询语法,能够灵活地处理多样化的查询需求,使得...

    lucene 查询 学习

    根据提供的标题、描述、标签及部分内容,我们可以提炼出与Lucene查询学习相关的知识点。下面将对这些知识点进行详细的阐述。 ### Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它...

    lucene查询结果集分页代码

    在lucene搜索分页过程中,可以有两种方式 一种是将搜索结果集直接放到session中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样...

    Lucene 索引的简单使用

    本篇文章将详细阐述如何使用Lucene来创建和查询索引,帮助你深入理解其核心概念和操作流程。 ### 1. Lucene基本概念 - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段...

    lucene做索引查询流程

    lucene 做索引查询流程,来自《lucene in action》

    lucene-query-string-builder:使用基本功能构建复杂的Lucene查询字符串

    Lucene查询字符串生成器 使用小型纯函数轻松构建您的Lucene字符串查询。 想象一下,有一个利用Lucene在(索引的)数据库上执行查询的API。 在这种情况下,您可能希望在客户端/前端上生成lucene查询字符串。 用法...

    lucene-query-parser:Lucene查询字符串解析器用作Web api查询或过滤器字符串

    Lucene查询解析器 Lucene查询字符串解析器,用作Web api查询或过滤器字符串。 基本代码来自 使用这种语言的示例查询: name: apple price: &gt; 100 price: &gt; 100 AND active: = 1 product.price: &gt; 100 AND ...

    lucene创建修改删除组合条件查询

    **组合条件查询**是Lucene查询的强大之处。你可以使用`BooleanQuery`来构造复杂的布尔逻辑,比如AND、OR、NOT操作。例如,可以创建两个`Query`对象,一个用于匹配关键词,另一个用于时间范围,然后通过`...

    luceneDemo

    3. **查询解析**: 后端服务接收到查询后,使用 QueryParser 将查询字符串解析为 Lucene 查询对象。 4. **执行搜索**: 使用 Searcher 执行查询,获取匹配的文档。 5. **返回结果**: 将搜索结果的文档得分、标题等信息...

    用 Lucene 加速 Web 搜索应用程序的开发

    学习如何解析用户输入的查询并转化为Lucene查询对象,以及如何使用Searcher执行查询。 4. **结果排序与优化:** Lucene提供了一种叫做TF-IDF的评分机制来决定搜索结果的相关性。了解如何自定义评分函数以满足特定...

    Lucene的一个毕业设计

    1. **查询解析**:用户输入的查询字符串需要通过 QueryParser 或 MultiFieldQueryParser 转换为 Lucene 查询对象。这些解析器会处理语法,识别短语、布尔运算符、通配符等。 2. **搜索执行**:使用 IndexSearcher ...

    Lucene5.3.1 中文完整Jar包

    2. **查询解析**:Lucene 提供了查询解析器,可以将用户的输入转换为索引理解的查询表达式,支持布尔运算、短语查询、近似查询等多种复杂查询模式。 3. **搜索执行**:基于倒排索引,Lucene 可以快速找到包含查询词...

    lucene.net+完全入门教程

    3. **查询解析**: 用户输入的查询字符串会被转换为Lucene查询语法,QueryParser类负责这个过程。它可以处理各种查询类型,如布尔查询、短语查询、前缀查询等。 4. **文档检索**: 使用IndexReader和IndexSearcher类...

    全文搜索-Lucene

    2. **查询处理**:用户输入查询字符串,查询解析器将它转化为 Lucene 查询对象。 3. **评分与排序**:搜索器根据查询对象和索引进行匹配,计算每个匹配文档的相关性分数,如 TF-IDF。 4. **结果返回**:按相关性...

    lucene检索新闻数据演示

    5. **查询解析**:用户输入的查询需要被解析成Lucene可以理解的格式。这可能涉及到查询分析,比如同义词扩展、短语匹配等。 6. **搜索执行**:通过Lucene的Query类构建查询对象,然后使用IndexSearcher进行搜索。...

    Lucene教程

    查询解析器(QueryParser)将用户的查询字符串转换成Lucene查询对象。它处理查询语法,支持布尔运算符、通配符、短语搜索等。 ## 3. Lucene实战 在实际项目中,开发者通常需要自定义分析器以适应特定的语言或领域...

Global site tag (gtag.js) - Google Analytics