欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

lucene多字段检索

程序员文章站 2022-07-09 09:31:00
...

默认情况下,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); // titlecontent 中找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