`

用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); 
    } 
分享到:
评论

相关推荐

    使用lucene进行简单的开发

    5. **CreateSearcher**: 私有方法,创建一个`MultiSearcher`,用于在多个索引文件中进行搜索。 ```java private MultiSearcher createSearcher(String[] targets) { // ... 实现创建多索引搜索器的代码 } ``` 在...

    lucene3.5的API

    - **多字段搜索**:允许同时在多个字段上进行搜索,提高查询效率。 - **命中高亮**:Highlighter 类可以对搜索结果中的关键词进行高亮显示。 5. **优化与维护** - **合并索引段**:通过调用 IndexWriter 的 ...

    lucene-5.2.1-src.tgz

    它包括IndexSearcher,用于在索引上进行搜索,以及MultiSearcher,用于同时在多个索引上搜索。 4. 写入器(IndexWriter):写入器负责创建和更新索引。在5.2.1版本中,它支持高效的批量添加和删除操作,以及动态...

    lucene分析

    5. Searcher:搜索器是执行查询的核心,它可以是IndexSearcher(针对单个索引)或MultiSearcher(针对多个索引)。 三、Lucene的查询处理 Lucene支持多种查询语法,如布尔查询、短语查询、范围查询等。查询过程...

    自己整理的 最新的 lucene-3.0.1_api

    4. **Searcher**:执行查询和返回结果的接口,包括IndexSearcher和MultiSearcher,后者可以同时在多个索引上执行搜索。 5. **Query**:表示用户输入的查询条件,如TermQuery(单个词)、BooleanQuery(布尔组合)和...

    Lucene基类UML图

    `Searcher`类可能有`IndexSearcher`和`MultiSearcher`,分别用于单个索引和多个索引的搜索,它们都实现了`search()`方法来执行查询。 此外,UML图还会展示类的方法和属性,比如`IndexWriter`的`addDocument()`、`...

    lucene jar包

    搜索器可以是IndexSearcher,用于在线搜索,或者MultiSearcher,用于同时在多个索引上执行搜索。 - **查询解析器(QueryParser)**:将用户的查询字符串转换为内部表示形式,支持多种查询语法,如布尔表达式、短语...

    Lucene3.5源码jar包

    8. **多字段搜索**:Lucene支持在多个字段上进行联合搜索,这在`MultiFieldQueryParser`中体现。 9. **文档处理**:`Document`类和`Field`类是处理文档数据的基本单元,源码中可以看到它们如何封装和存储信息。 10...

    Lucene 全文检索

    4. **Document 和 Field**:在 Lucene 中,每个要索引的对象称为 Document,可以包含多个属性,每个属性称为 Field。例如,一篇文章可以是一个 Document,其标题、内容和作者分别作为不同的 Fields。 5. **...

    lucene-3.0.3-src.zip

    它可以是IndexSearcher,用于在线搜索,也可以是MultiSearcher,用于同时在多个索引上执行查询。 二、Lucene 3.0.3的改进与特性 1. **性能提升**:3.0.3版本在搜索速度和内存使用上进行了优化,尤其在处理大量文档...

    lucene.net

    - **Multi-field Search**: 在多个字段中同时搜索,提高搜索覆盖率。 - **Memory Indexing**: 支持内存中的索引,适用于小型数据集或实时搜索场景。 ### 5. 应用场景 Lucene.NET 广泛应用于内容管理系统、电子商务...

    Lucene.Net-1.9.1-004-27Nov06源码

    包括IndexSearcher,用于在线搜索,以及MultiSearcher,用于同时搜索多个索引。 4. 其他关键组件 - 倒排索引(Inverted Index):Lucene的核心数据结构,用于高效地进行文本查找。每个词项指向包含它的文档列表。 ...

    Lucene 3.0 原理与代码分析完整版

    5. 多线程支持:允许多个线程同时读写索引,提高性能。 通过对《Lucene 3.0 原理与代码分析完整版》的学习,开发者不仅可以理解Lucene的工作原理,还能掌握如何定制化Lucene以满足特定需求,从而在实际项目中充分...

    lucene2.0.0

    6. **搜索过程**:查询执行涉及查询分析、索引搜索和结果评分。使用TF-IDF算法计算相关性,对结果进行排序。 三、API详解 Lucene 2.0.0的主要API包括以下几个关键类: 1. **IndexWriter**:用于创建和更新索引,...

    【分享:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    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. 按文档...

Global site tag (gtag.js) - Google Analytics