lucene多字段检索

默认情况下,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 :表示 或 关系,最终检索结果为所有检索子句的并集。

 

猜你喜欢

转载自haiyupeter.iteye.com/blog/305489