用MultiSearcher在多索引中进行搜索

/**
* 多索引进行查询
*/
public void testCreateIndex() {
Analyzer analyzer = new IKAnalyzer();
String atext ="明年起,杭州将对两区五县(市)居民发放市民卡,实现杭州市域范围医保“一卡通”凭卡就医。12月底,首批发卡工作将拉开帷幕";
String btext ="搜索操作为每个Searchable分配一个线程市民卡,直到所有线程都完成其搜索。基本搜索和进行过滤的搜索是并行执行的";

Directory a = new RAMDirectory();
Directory b = new RAMDirectory();

IndexWriter awriter;
IndexWriter bwriter;

IndexSearcher[] searchers;

try {
awriter = new IndexWriter(a, analyzer, true ,IndexWriter.MaxFieldLength.LIMITED);
Document adoc = new Document();
adoc.add(new Field("aid", "1", Field.Store.YES,Field.Index.ANALYZED));
adoc.add(new Field("doc", atext, Field.Store.YES,Field.Index.ANALYZED));
adoc.add(new Field("name", "张三", Field.Store.YES,Field.Index.NOT_ANALYZED));
awriter.addDocument(adoc);
awriter.close();

bwriter = new IndexWriter(b, analyzer, true ,IndexWriter.MaxFieldLength.LIMITED);
Document bdoc = new Document();
bdoc.add(new Field("bid", "1", Field.Store.YES,Field.Index.ANALYZED));
bdoc.add(new Field("doc", btext, Field.Store.YES,Field.Index.ANALYZED));
bdoc.add(new Field("name", "李四", Field.Store.YES,Field.Index.NOT_ANALYZED));
bwriter.addDocument(bdoc);
bwriter.close();

searchers = new IndexSearcher[2];
searchers[0]=new IndexSearcher(a);
searchers[1]=new IndexSearcher(b);

MultiSearcher searcher=new MultiSearcher(searchers);
//对2个索引进行搜索

String[] fields =new String[]{"aid","doc","name"};
Query query=IKQueryParser.parseMultiField(fields, "张三");
// Query query=IKQueryParser.parse("doc", "市民卡");
TopDocs topDocs = searcher.search(query, 200);
ScoreDoc[] hits = topDocs.scoreDocs;
for (int i = 0; i < hits.length; i++) {
Document doc = searcher.doc(hits[i].doc);
System.out.println("name:"+doc.get("name"));
System.out.println("aid:"+doc.get("aid")+"bid:"+doc.get("bid"));
System.out.println("doc:"+doc.get("doc"));
}
assertNotNull(topDocs);

} catch (CorruptIndexException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (LockObtainFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// List<User> userList = userService.getUserList();
// userIndexService.createIndex(userList);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值