默认情况下,IndexSearcher
类的search
方法返回查询结果时,
是按文档的分值排序的,
可以使用重载的search
方法对结果排序
IndexSearcher.search(Query,Sort);
new Sort()
和 Sort.RELEVANCE,
以及null
一样,
采用默认排序,
要定义排序字段,
方法是将字段传入Sort
对象
Sort sort = new Sort(String field);
也可以对多个字段排序Sort sort = new Sort(String[] fields);
例:
Sort sort = new Sort(new SortField[]{new SortField(“title”),new
SortField(“name”)});
Hits hits=searcher.search(query,Sort);
多字段查找MultiFieldQueryParser
只在某些Term
中查找,
不关心在哪个字段
Query query = new MultiFieldQueryParser.parse(“word”,new
String[]{“title”,”content”},analyzer); //
在title
和content
中找word
多字段时默认是OR
关系,
要改变它,
使用以下方法:
Query query = MultiFieldQueryParser.parse(“word”,new
String[]{“title”,”content”},new
int[]{MultiFieldQueryParser.REQUIRED_FIELD,MultiFieldQueryParser.PROHIBITED_FIELD},analyzer);
其中:
REQUIRED_FIELD
表示该条件必须有
PROHIBITED_FIELD
表示必须不含
搜索多个索引文件MultiSearcher
1)
建立多个索引:
使用不同的索引目录,
实例化不同的IndexWriter
2)
建立多索引搜索器:
Searcher[] searchers = new SEARCHER[2];
Searchers[0] = new IndexSearcher(dir1); //
搜索索引目录一
Searchers[1]= new IndexSearcher(dir2);//
搜索索引目录二
Searcher searcher = new MultiSearcher(serarchers);
3)
开始查询:Hits hits =
searcher.search(query);
BooleanQuery typeNegativeSearch = new BooleanQuery();
QueryParser parser = new QueryParser("contents", new Analyzer());
parser.setDefaultOperator(QueryParser.AND_OPERATOR);
query = parser.parse(queryString);
QueryParser parser2 = new QueryParser("adISELL", new Analyzer());
query2 = parser2.parse("\"2\"");
QueryParser parser3 = new QueryParser("adISELL", new Analyzer());
query3 = parser3.parse("\"2\"");
QueryParser parser4 = new QueryParser("adISELL", new Analyzer());
query4 = parser4.parse("\"2\"");
QueryParser parser4 = new QueryParser("adISELL", new Analyzer());
query4 = parser4.parse("\"2\"");
QueryParser parser..n = new QueryParser("adISELL", new Analyzer());
query..n = parser..n.parse("\"2\"");
typeNegativeSearch.add(query,Occur.MUST);
typeNegativeSearch.add(query2,Occur.MUST);
typeNegativeSearch.add(query3,Occur.MUST);
typeNegativeSearch.add(query4,Occur.MUST);
.....
typeNegativeSearch.add(query..n,Occur.MUST);
hits = searcher.search(typeNegativeSearch);
1, 几种span 的querySpanTermQuery :检索效果完全同TermQuery ,但内部会记录一些位置信息
,供SpanQuery 的其它API 使用,是其它属于SpanQuery 的Query 的基础。
SpanFirstQuery :查找方式为从Field 的内容起始位置开始,在一个固定的宽度内查找所指定的
词条。
SpanNearQuery :功能类似PharaseQuery 。SpanNearQuery 查找所匹配的不一定是短语,还有可
能是另一个SpanQuery 的查询结果作为整体考虑,进行嵌套查询。
SpanOrQuery :把所有SpanQuery 查询结果综合起来,作为检索结果。
SpanNotQuery :从第一个SpanQuery 查询结果中,去掉第二个SpanQuery 查询结果,作为检索结
果。
2, 多条件索引关系
BooleanClause 用于表示布尔查询子句关系的类,包括:BooleanClause.Occur.MUST ,
BooleanClause.Occur.MUST_NOT ,BooleanClause.Occur.SHOULD 。有以下6 种组合:
1 .MUST 和MUST :取得连个查询子句的交集。
2 .MUST 和MUST_NOT :表示查询结果中不能包含MUST_NOT 所对应得查询子句的检索结果。
3 .MUST_NOT 和MUST_NOT :无意义,检索无结果。
4 .SHOULD 与MUST 、SHOULD 与MUST_NOT :SHOULD 与MUST 连用时,无意义,结果为MUST 子句的检索
结果。与MUST_NOT 连用时,功能同MUST 。
5 .SHOULD 与SHOULD :表示“ 或” 关系,最终检索结果为所有检索子句的并集。
分享到:
相关推荐
本话题聚焦于“Lucene多字段查询”和“文字高亮显示”,这两个特性在信息检索和数据挖掘中具有广泛应用。 首先,让我们深入理解“Lucene多字段查询”。在信息检索系统中,用户可能希望根据多个字段来过滤和排序结果...
每个文档由多个字段(Field)组成,每个字段包含特定类型的数据(如文本、日期等)。 - **IndexWriter**: 索引写入器用于创建和更新 Lucene 索引。它可以接收 Document 对象并将其转换为倒排索引,这是一种高效的...
##### 2.2 数据库字段检索模式与Lucene的区别 | 特性 | 传统数据库检索 | Lucene | | --- | --- | --- | | **适用对象** | 主要适用于结构化数据 | 适用于结构化与非结构化数据 | | **检索效率** | 对于大量非结构...
1. **文档(Document)**:在Lucene中,每个要搜索的文本对象被称为一个文档,文档由多个字段(Field)组成,如标题、内容、作者等。 2. **字段(Field)**:字段是文档的组成部分,每个字段都有一个名字和一个值,...
【描述】提到的“在学校教育网上搜的 不知道帮助大不大 看看吧 也许会用得到 好多个 可能有重复”暗示了资源可能包含多个关于Lucene全文检索系统的PDF文档,这些文档可能来源于不同的来源,可能涵盖相同或相似的主题...
1. **多字段搜索**:Lucene支持对多个字段进行同时搜索,通过BooleanQuery或者DisjunctionMaxQuery实现。 2. **模糊搜索**:通过使用PrefixQuery、WildcardQuery或FuzzyQuery,可以实现模糊匹配和通配符查询。 3. ...
《Lucene全文检索:简单索引与搜索实例详解》 Lucene是Apache软件基金会的开源项目,是一款强大的全文检索库,被广泛应用于Java开发中,为开发者提供了构建高性能搜索引擎的能力。在本文中,我们将深入探讨如何基于...
8. **多字段检索** 在Lucene中,可以为多个字段创建索引,用户可以指定在哪些字段上执行查询。通过`Field`对象设置不同的分析器,可以实现对不同字段的定制化搜索。 9. **扩展性与复杂查询** Lucene支持复杂的...
1. 文档(Document):Lucene中的最小处理单元,相当于数据库中的一条记录,由多个字段(Field)组成。 2. 字段(Field):文档的组成部分,每个字段都有特定的属性,如是否可被索引、是否可被存储等。 3. 分词器...
2. **文档域**:在Lucene中,每个要被检索的文件被视为一个文档(Document),文档由多个字段(Field)组成,如标题、正文、作者等。每个字段可以有不同的分析策略。 3. **分词器(Tokenizer)**:分词器是将文本...
1. **多字段搜索**:Lucene允许对多个字段进行搜索,只需在查询构造时指定字段名和查询条件。 2. **评分与排序**:Lucene使用TF-IDF算法计算文档的相关性分数,搜索结果默认按分数排序。 3. **模糊搜索**:支持...
在本案例中,我们将在 .Net MVC4 框架上使用 Lucene.Net 来构建一个全文检索系统。 首先,我们需要理解全文检索的基本概念。全文检索是指在文档集合中,根据用户输入的查询词,查找包含这些词的文档。与传统的...
在Lucene 3.0版本中,它引入了多项优化和改进,进一步提升了检索效率和用户体验。 **一、Lucene 3.0 的核心概念** 1. **索引**:Lucene首先将文档内容转换成倒排索引(Inverted Index),这是一个数据结构,用于...
**使用Lucene全文检索数据库** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发。它是Java编写的,能够帮助开发者在各种应用程序中实现强大的全文检索功能。在这个项目中,我们将探讨如何利用Lucene ...
3. **文档(Document)**:在Lucene中,每个要索引的对象被表示为一个文档,包含多个字段(Field),比如Word文档的标题、内容、作者等。 4. **字段(Field)**:字段是文档的组成部分,每个字段有其特定的属性,...
### Lucene基于Java的全文检索引擎简介 #### 一、Lucene概述与历史背景 Lucene是一个基于Java的全文检索引擎工具包,旨在为各种规模的应用程序提供强大的文本搜索功能。该工具包由Doug Cutting创建,他是全文检索...
这个SpringBoot+Lucene的Demo为开发者提供了一个起点,可以在此基础上进一步扩展,比如增加对多字段的索引和搜索、支持多种类型的文档、优化查询性能等。通过熟练掌握这些知识,你可以构建出更加强大的全文搜索引擎...
- **Document**:表示要索引的单个数据源,可以包含多个字段(Field)。 - **Field**:文档中的信息单元,可以设置不同的属性(如是否存储原始值,是否被索引等)。 - **IndexReader** 和 **IndexSearcher**:...
《Lucene 3.6 全文检索技术详解》 Lucene是一个开源的全文检索库,由Apache软件基金会开发,广泛应用于各种搜索场景。在本文中,我们将深入探讨Lucene 3.6版本中的核心概念和技术,以帮助你更好地理解和应用这一...