• lucene 多索引目录搜索实现方法


    http://akululu.iteye.com/blog/314130
    多索引目录就是要在多个索引目录的中进行比较搜索,类似概念在SQL中就是select * from TableA union select * from TableB。
    IndexSearcher[] searchers = new IndexSearcher[2];
    searchers[0] = new IndexSearcher(IndexPath0);
    searchers[1] = new IndexSearcher(IndexPath1);

    方法a
    MultiSearcher multisearcher = new MultiSearcher(searchers);
    TopDocs multitopdocs = multisearcher.Search(query, null, 1000);
    这个搜索的结果可能有相同的信息,比如你有一条相同的信息在多个目录中索引,搜索的结果就会出现多次相同的信息。

    方法b
    还有一种搜索方式是用到ParallelMultiSearcher这个对象,它是从MulitSearcher继承而来。
    ParallelMultiSearcher parallelmultisearcher = new ParallelMultiSearcher(searchers);
    TopDocs paralleltopdocs = parallelmultisearcher.Search(query, null, 1000);
    这个搜索是对搜索后的结果进行合并,剔除重复的信息。
     
    方法c
    初始化多个IndexRader,一个目录就是一个IndexReader,最后整合成一个IndexReader数组,实例化IndexSearcher时传入他
    List<IndexReader> allIndexReaderList = new ArrayList<IndexReader>();
    for (String filePath : indexFilePathList) {
         File indexDirFile = new File(filePath);
         if (indexDirFile.exists()) {
              Directory indexDir = FSDirectory.open(indexDirFile);
              IndexReader indexReader = IndexReader.open(indexDir, true);
              allIndexReaderList.add(indexReader);
         }
    }

    IndexReader[] fileIndexReaderArr = allIndexReaderList.toArray(new IndexReader[0]);

    MultiReader multiReader = new MultiReader(fileIndexReaderArr, true);

    IndexSearcher indexSearcher = new IndexSearcher(multiReader);
  • 相关阅读:
    二分和牛顿法实现开根号
    leetcode 44. 通配符匹配
    leetcode 91. 解码方法
    leetcode 236. 二叉树的最近公共祖先
    leetcode 39. 组合总数
    leetcode:146. LRU缓存机制
    leetcode:124. 二叉树中的最大路径和
    二叉树前序遍历,中序遍历,后序遍历以及层次遍历实现
    leetcode: 4. 寻找两个有序数组的中位数
    Leetcode: 43. 接雨水
  • 原文地址:https://www.cnblogs.com/svennee/p/4080619.html
Copyright © 2020-2023  润新知