码迷,mamicode.com
首页 > 其他好文 > 详细

luence优化速度

时间:2017-07-27 18:28:24      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:搜索   copyto   open   file   tracking   data-   out   lib   文件   

一. .索引优化背景

很多网站都有自己的搜索引擎,比如百度,搜狗等等,而他们每天添加的索引量可想而知多么庞大,所以为了能提升用户的搜索响应速度,好的优化方案必不可少;当然对于一些网站的站内搜索也很有必要,否则日积月累之后,索引文件也将难以维护,搜索效率越来越慢,用户好评率自然降低。

由于我所在的公司也用到Lucene做搜索,所以相应学习了下。

二. .索引优化方法

目前来说有几种比较常见的优化方法:

1.  设置IndexWriterConfig中mergeFactor的值.

         mergeFactor即合并因子,当大小相当的段的数量达到此值的时候开始合并。

注意:mergeFactor应设在(2-10)之间,mergeFactor越小,创建索引的时候占用内存越小,所以创建索引速度慢,但是反向索引时速度快;

  mergeFactor越大,创建索引的时候占用内存越大,所以创建索引速度快,但是反向索引时速度慢。

合并策略:比如 mergeFactor=3,开始来的段大小为 10M,当凑够 3 个 10M 的时候, 0.cfs, 1.cfs, 2.cfs则合并成一个新的段 3.cfs,大小为 30M,然后再来 4.cfs, 5.cfs, 6.cfs,合并成 7.cfs,大小为 30M,然后再来 8.cfs, 9.cfs, a.cfs 合并成 b.cfs, 大小为 30M,这时候又凑够了 3 个30M 的,合并成 90M 的 c.cfs,然后又来 d.cfs, e.cfs, f.cfs 合并成 10.cfs,大小为 30M,然后 11.cfs 大小为 10M,这时候硬盘上的段为: c.cfs(90M) 10.cfs(30M),11.cfs(10M)。

 2. 排除停用词

  什么是停用词?停用词就是没有实际意义不参与索引的词。比如,"这是一首简单的小情歌!"其中‘这是’、‘的’就可以当做停用词排除掉,被分词器过滤掉后,就不会建立索引,这样索引文件就会变小,搜索的时候就会变快。在庖丁分词器中,就可以自定义停用词和自己的词典。

3. 将索引数据分区存放

为什么要分区存放?假如咱们手上有海量的各种数据,比如音频,小说,新闻,游戏。。如果分区存放的话,用户只需在小范围区间搜索就行了,可以很大程度提高检索速度减少服务器压力。这在某种方式上类似于分流。

4. 将硬盘上的索引文件放入内存中提升索引速度

 

  1. //索引放在硬盘上  
  2. Directory dir = FSDirectory.open(new File(indexPath));  
  3. //索引放在内存中  
  4. IOContext ioc = new IOContext();  
  5. Directory  ramDic = new RAMDirectory(dir, ioc);  
  6. //然后将ramDic传入IndexReader  
  7. IndexReader reader = DirectoryReader.open(ramDic);  
  8. IndexSearcher searcher = new IndexSearcher(reader);  
  9. //...  
5. 在查询时优化

查询分为TermQuery(以term为单位查询)、MultiFieldQueryParser(字符串查询,将字符串分割为单个字符)、MatchAllDocsQuery(查询所有)、NumericRangeQuery(范围查询,性能较过滤器高)、WildcardQuery(通配符查询,?为占位符,*匹配所有)、FuzzyQuery(模糊查询,其中构造器第二个参数代表可缺少字符数)

luence优化速度

标签:搜索   copyto   open   file   tracking   data-   out   lib   文件   

原文地址:http://www.cnblogs.com/xzjf/p/7245685.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!