ImproveSearchingSpeed精简翻译

1.不会动您就别瞎动,确实是我的问题您再动,不然越动越乱。

2.请及时更新至我的最新版本。(注:我不确定3.0.X版本之间索引是否兼容,应该是兼容的)

3.在本机磁盘建索引,别用网络磁盘挂载,你要是非得网络挂载也没辙,最好用只读(ReadOnly)方式挂载,还能稍微好点。(注:在本机磁盘建索引效率高,这点我们已经实践过了)

4.固态硬盘寻道时间比传统硬盘快100倍什么什么很好很无敌等等。(注:不用翻译了,真买不起这玩意儿)

5.调整操作系统,在linux中交换分区设置过大可能会影响查询效率,可以设置小一点。(注:最后没办法时,我们可能才会考虑研究这个)

6.多线程共用一个IndexReader对象时,以只读(ReadOnly)方式打开,效果会很明显。(注:现在3.X版本打开IndexReader,默认就是ReadOnly的)

7.在非windows平台上,使用NIOFSDirectory而不是FSDirectory,在windows平台上NIO一直有BUG。

8.加内存条,加大JVM内存上限。

9.IndexSearcher单例化。(注:我们将IndexReader单例化,效果也很明显)

10.首次查询会有初始化缓存的过程,所以第一次查询慢是正常的。(注:这跟性能调优好像没什么关系)

11.IndexSearcher进行reopen操作要消耗系统资源,不这么干你就没法同步后来索引新增的数据,可以考虑预热(Warming)技术在查询之前先缓存起来。

12.索引建好后要优化(optimize),尤其是更新频率低的索引一定要优化,但如果是更新频率很高的话,优化操作会带来负面开销,只能通过减少mergeFactor参数来缓解。

13.减小mergeFactor参数的设置(注:这个设置多少我们认为要看实际情况,实践中发现值比较小,索引建立过程中也会出现很多意外的情况)

14.限制向量和字段的使用,只获取你需要的数据而不要获取全部,可以先将文档编号(docID)排序再获取。

15.当获取文档时,使用FieldSelector来选出要取哪些字段以及怎么获取。(注:目前没用过这东西,现在的理解就是一个字段过滤器)

16.迭代所有的hits慢,有倆原因,首先是search()方法如果返回的hits超过了100个,它会再运行查询,可以使用返回HitCollector的search方法代替(注:不太明白,哪儿有啊),然后是hits可能分散在磁盘里,获取要更费IO,除非索引很小以便可以直接搁内存里,如果你不需要完整的文档对象,而只需要一小部分字段,可以显式用FieldCache类缓存起来。

17.当使用Fuzzy查询时,使用最少的前缀长度。(注:我们不用这玩意儿)

18.研究研究filters,查询时使用一个已缓存的bit集来限制结果集,比使用查询子句更有效,尤其是在大索引中查询大数目的文档,过滤器经常用在查询分类结果,很多时候也被查询子句替代,不同之处在于Query影响文档得分而Filter不会。

19.好好找出真正的瓶颈,复杂的查询,重量级的结果集处理往往就是关键之处,用XXX工具仿真来辅助定位问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值