`
catastiger
  • 浏览: 138480 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用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