读书人

用MultiSearcher在多目录中进行搜索

发布时间: 2012-09-21 15:47:26 作者: rapoo

用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);    }

读书人网 >软件架构设计

热点推荐