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); //在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);

 

还有一种搜索方式是用到ParallelMultiSearcher这个对象,它是从MulitSearcher继承而来。
ParallelMultiSearcher parallelmultisearcher = new ParallelMultiSearcher(searchers);
TopDocs paralleltopdocs = parallelmultisearcher.Search(query, null, 1000);
这个搜索是对搜索后的结果进行合并,剔除重复的信息。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值