如题:1.问题1:如何在大数据量上提升查询速度,目前我项目中8亿个文档数,100GB索引文件。查询单一组词平均需要7秒左右,结果一般在1亿条左右(查询的中文)。求如何提升速度。2,问题2: 关于lucene 3.3 后的分组统计问题。尤其是BlockGroupingCollector.java这个类的使用,关于该类涉及到的lastDocInBlock 这个filter 要怎么在建立索引的时候控制。
求真正的LUCENE 高手帮忙!!!项目急需。

解决方案 »

  1.   

    不用solr 太局限了~~你懂的!~
      

  2.   

    不太清楚你说的单一组词是什么概念。 一个词么?
    我理解的是用户提交的查询内容可以切分为多个词。如果是OR,那就很容易解决,如果是AND,处理起来相对麻烦。1. 100G索引文件切分成 10个。 检索 10 个 subSearcher, 之后将结果归并。可以参考一下 ParallelMultiSearcher。
    至于你说的评分不知道指的是什么,规则一样的情况下,针对某一个文档的“评分”不应该出现不同。2. AND关系可以试一下结果集再查询。性能和精确性是有一定矛盾的,可能需要放弃一定的精确性还获得性能的提高。抛开词频 、 权重等附加信息, 切分词<->文档ID 的对应关系很简单直接,可以参考一下数据库查询优化的相关技巧。
      

  3.   


    首先,很感谢deltatang的回复,真的。你说这个切分100G的索引为10个索引,LUCENE有这样的API吗?
    你说的部署到多台上是,使用的是RMI+lucene的技术吗?
    你说的归并,是指在ParallelMultiSearcher这个类里有么?
      

  4.   

    关于数据切分,有垂直切分和水平切分。我说的是水平切分。用不着啥api。 建立索引的时候,八亿个文件散列一下,平均扔到10个索引库里面就得。ParallelMultiSearcher gg一下,有很多例子,也不是说一定得用这个,找个思路就行了:)至于网络通讯,是不是用rmi,看个人喜好了。