`
wwty
  • 浏览: 543157 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

lucene当中的各种query(一)

阅读更多

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 使用正则表达式

    Lucene的核心特性之一就是支持复杂的查询语言,其中包括正则表达式。 #### 正则表达式在Lucene中的应用 正则表达式是一种强大的文本模式匹配工具,广泛应用于字符串搜索和替换等场景。在Lucene中,可以通过`regexQuery...

    lucene,lucene教程,lucene讲解

    第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。 public void add(Query query, BooleanClause.Occur occur) BooleanClause用于表示布尔查询子句关系的类,包括: BooleanClause.Occur.MUST,...

    lucene中的SpanQuery和PhraseQuery详解(有图示)

    Lucene是一个功能强大的搜索引擎库,提供了多种查询方式,其中SpanQuery和PhraseQuery是两个重要的查询类型。本文将详细介绍SpanQuery和PhraseQuery的使用和区别。 一、SpanQuery SpanQuery是一个抽象类,提供了...

    Lucene各种jar包

    3. **Query Parsing**: Lucene提供了一种灵活的查询解析机制,允许用户使用高级查询语法,如布尔逻辑、短语查询和范围查询。`QueryParser`类处理这些查询,并生成可以执行的`Query`对象。 4. **Indexing**: 在...

    Lucene 搜索方法(模糊搜索)

    在IT领域,搜索引擎技术是不可或缺的一部分,而Apache Lucene是一个高性能、全文本搜索库,它为开发者提供了构建自定义搜索引擎应用程序所需的所有工具。本篇我们将深入探讨如何在Lucene中实现模糊搜索,以及相关的...

    lucene部分常用代码

    Lucene是一款功能强大且高效的搜索引擎,广泛应用于各种搜索应用程序中。为了更好地使用Lucene,需要了解其核心API和常用代码。本文将对Lucene部分常用代码进行详细解释,包括多字段搜索、多条件搜索、过滤等。 多...

    第一个lucene程序

    《第一个Lucene程序详解》 在信息技术领域,搜索引擎的实现是一项关键的技术,而Apache Lucene作为一款开源全文检索库,为开发者提供了强大的文本搜索功能。本文将深入探讨如何编写你的“第一个Lucene程序”,帮助...

    Lucene初探,一个初级的LuceneDemo

    随着深入学习,你会发现Lucene的强大之处在于其高度定制化的能力,可以满足各种复杂的搜索需求。在实际项目中,结合Solr或Elasticsearch这样的分布式搜索平台,Lucene可以为企业级应用提供高效、可扩展的搜索解决...

    Lucene全文检索引擎

    Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索引擎库,可以被集成到各种应用中实现全文检索功能。Lucene提供了完整的搜索功能实现,包括索引创建、文档存储、查询解析和结果排序等。它的设计...

    Lucene5学习之SpellCheck拼写纠错

    Lucene是一个开源的全文检索库,由Apache软件基金会开发,它提供了高性能、可扩展的文本搜索功能。Lucene5是该库的一个版本,其中包含了对拼写纠错(SpellCheck)的支持,使得用户可以查找并纠正查询中的拼写错误。 ...

    lucene的一个实用例子

    Lucene 是一个开源全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够轻易地在应用中集成全文检索功能。本实例将通过一个具体的应用场景,帮助大家了解 Lucene 的...

    基于Lucene的Lucene

    Lucene是一款开源的全文搜索引擎库,由Apache软件基金会维护,被广泛应用于各种搜索引擎的开发。它提供了一个高效、可扩展的框架,用于索引和搜索大量文本数据。本篇文章将深入探讨如何基于Lucene开发一个文件检索...

    lucene

    Lucene是一个全文搜索引擎库,由Apache软件基金会开发并维护,它提供了高效的文本检索、分析和存储功能。在Java编程语言中,Lucene被广泛应用于各种需要全文搜索功能的系统,如网站、文档管理、知识库等。其强大的...

    Lucene时间区间搜索

    Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...

    Annotated Lucene 中文版 Lucene源码剖析

    Lucene是一款开源的Java库,它提供了高效的文本搜索功能,被广泛应用于各种信息检索系统。这本书面向对Java编程和信息检索感兴趣的开发者,通过详尽的注释和分析,使读者能够深入掌握Lucene的内部机制。 首先,...

    Lucene示例 BM25相似度计算

    在IT领域,搜索引擎技术是至关重要的,而Lucene作为一个开源全文搜索引擎库,广泛应用于各种文本检索系统中。本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、...

    Lucene的原理完整版pdf

    Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单但功能强大的API,用于索引和搜索文本数据,使得开发者可以轻松地在应用程序中实现复杂的...

    Lucene之删除索引

    当你调用`IndexWriter.deleteDocuments(Term term)`或`IndexWriter.deleteDocuments(Query query)`方法时,Lucene并不会立即从硬盘上删除对应的文档,而是将这些待删除的文档ID存储在一个叫做“位向量”(BitSet)的...

    lucene 全包 包括源码

    Lucene 是一个开源的全文检索库,由Apache软件基金会开发并维护。它为Java开发者提供了强大的文本搜索功能,被广泛应用于各种搜索引擎和信息检索系统。Lucene的核心特性包括索引和搜索,支持多种数据源,如文件、...

Global site tag (gtag.js) - Google Analytics