/**
* 多索引进行查询
*/
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);
}
分享到:
相关推荐
5. **CreateSearcher**: 私有方法,创建一个`MultiSearcher`,用于在多个索引文件中进行搜索。 ```java private MultiSearcher createSearcher(String[] targets) { // ... 实现创建多索引搜索器的代码 } ``` 在...
- **多字段搜索**:允许同时在多个字段上进行搜索,提高查询效率。 - **命中高亮**:Highlighter 类可以对搜索结果中的关键词进行高亮显示。 5. **优化与维护** - **合并索引段**:通过调用 IndexWriter 的 ...
它包括IndexSearcher,用于在索引上进行搜索,以及MultiSearcher,用于同时在多个索引上搜索。 4. 写入器(IndexWriter):写入器负责创建和更新索引。在5.2.1版本中,它支持高效的批量添加和删除操作,以及动态...
5. Searcher:搜索器是执行查询的核心,它可以是IndexSearcher(针对单个索引)或MultiSearcher(针对多个索引)。 三、Lucene的查询处理 Lucene支持多种查询语法,如布尔查询、短语查询、范围查询等。查询过程...
4. **Searcher**:执行查询和返回结果的接口,包括IndexSearcher和MultiSearcher,后者可以同时在多个索引上执行搜索。 5. **Query**:表示用户输入的查询条件,如TermQuery(单个词)、BooleanQuery(布尔组合)和...
`Searcher`类可能有`IndexSearcher`和`MultiSearcher`,分别用于单个索引和多个索引的搜索,它们都实现了`search()`方法来执行查询。 此外,UML图还会展示类的方法和属性,比如`IndexWriter`的`addDocument()`、`...
搜索器可以是IndexSearcher,用于在线搜索,或者MultiSearcher,用于同时在多个索引上执行搜索。 - **查询解析器(QueryParser)**:将用户的查询字符串转换为内部表示形式,支持多种查询语法,如布尔表达式、短语...
8. **多字段搜索**:Lucene支持在多个字段上进行联合搜索,这在`MultiFieldQueryParser`中体现。 9. **文档处理**:`Document`类和`Field`类是处理文档数据的基本单元,源码中可以看到它们如何封装和存储信息。 10...
4. **Document 和 Field**:在 Lucene 中,每个要索引的对象称为 Document,可以包含多个属性,每个属性称为 Field。例如,一篇文章可以是一个 Document,其标题、内容和作者分别作为不同的 Fields。 5. **...
它可以是IndexSearcher,用于在线搜索,也可以是MultiSearcher,用于同时在多个索引上执行查询。 二、Lucene 3.0.3的改进与特性 1. **性能提升**:3.0.3版本在搜索速度和内存使用上进行了优化,尤其在处理大量文档...
- **Multi-field Search**: 在多个字段中同时搜索,提高搜索覆盖率。 - **Memory Indexing**: 支持内存中的索引,适用于小型数据集或实时搜索场景。 ### 5. 应用场景 Lucene.NET 广泛应用于内容管理系统、电子商务...
包括IndexSearcher,用于在线搜索,以及MultiSearcher,用于同时搜索多个索引。 4. 其他关键组件 - 倒排索引(Inverted Index):Lucene的核心数据结构,用于高效地进行文本查找。每个词项指向包含它的文档列表。 ...
5. 多线程支持:允许多个线程同时读写索引,提高性能。 通过对《Lucene 3.0 原理与代码分析完整版》的学习,开发者不仅可以理解Lucene的工作原理,还能掌握如何定制化Lucene以满足特定需求,从而在实际项目中充分...
6. **搜索过程**:查询执行涉及查询分析、索引搜索和结果评分。使用TF-IDF算法计算相关性,对结果进行排序。 三、API详解 Lucene 2.0.0的主要API包括以下几个关键类: 1. **IndexWriter**:用于创建和更新索引,...
4.11. MultiSearcher类--多个索引搜索 13 4.12. ParalellMultiSearcher类---多线程搜索 14 5. 排序 14 5.1. Sort类 14 5.2. SortField类 14 5.3. 指定排序的法则 15 5.3.1. 按照文档的得分降序排序 15 5.3.2. 按文档...