一. .索引优化背景

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

由于我所在的公司也用到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(模糊查询,其中构造器第二个参数代表可缺少字符数)

最新文章

  1. 函数式Android编程(II):Kotlin语言的集合操作
  2. UML中的六大关系(转)
  3. Xamarin.Android经验之谈
  4. Delphi制作DLL
  5. CSDN 分糖果算法的思路和求助
  6. 安卓第十四天笔记-内容提供者(ContentProvider)
  7. git 本地分支与远程分支关联的一种方法
  8. lintcode 中等题:unique Binary Search Tree 不同的二叉查找树
  9. 删掉SafeDrv病毒(这个病毒有点意思)
  10. 建立Hibernate二级Cache
  11. Nginx + Apache 反向代理
  12. kali linux安装搜狗输入法的方法
  13. css3 实现波浪(wave)效果
  14. 关于boost中enable_shared_from_this类的原理分析
  15. centos中PATH环境变量查看和修改
  16. 四、springboot(一)入门
  17. c#中的as,is和强转
  18. 洛谷 p2530 化工场装箱员(资源型)
  19. .NET平台常用框架整理
  20. uva11806(容斥原理)

热门文章

  1. Linux修改启动界面、分辨率
  2. Python之面向对象新式类和经典类
  3. 华中农业大学第四届程序设计大赛网络同步赛-1020: Arithmetic Sequence,题挺好的,考思路;
  4. 转盘抽奖 canvas & 抽奖 H5 源码
  5. Node.js & module system
  6. [USACO08NOV]时间管理Time Management
  7. Thinkphp5.0 的Db操作
  8. hdu - 1113 Word Amalgamation (stl)
  9. hdu - 1195 Open the Lock (bfs) && hdu 1973 Prime Path (bfs)
  10. CLR GC