luence优化速度
一. .索引优化背景
很多网站都有自己的搜索引擎,比如百度,搜狗等等,而他们每天添加的索引量可想而知多么庞大,所以为了能提升用户的搜索响应速度,好的优化方案必不可少;当然对于一些网站的站内搜索也很有必要,否则日积月累之后,索引文件也将难以维护,搜索效率越来越慢,用户好评率自然降低。
由于我所在的公司也用到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. 将硬盘上的索引文件放入内存中提升索引速度
- //索引放在硬盘上
- Directory dir = FSDirectory.open(new File(indexPath));
- //索引放在内存中
- IOContext ioc = new IOContext();
- Directory ramDic = new RAMDirectory(dir, ioc);
- //然后将ramDic传入IndexReader
- IndexReader reader = DirectoryReader.open(ramDic);
- IndexSearcher searcher = new IndexSearcher(reader);
- //...
5. 在查询时优化
查询分为TermQuery(以term为单位查询)、MultiFieldQueryParser(字符串查询,将字符串分割为单个字符)、MatchAllDocsQuery(查询所有)、NumericRangeQuery(范围查询,性能较过滤器高)、WildcardQuery(通配符查询,?为占位符,*匹配所有)、FuzzyQuery(模糊查询,其中构造器第二个参数代表可缺少字符数)
最新文章
- 函数式Android编程(II):Kotlin语言的集合操作
- UML中的六大关系(转)
- Xamarin.Android经验之谈
- Delphi制作DLL
- CSDN 分糖果算法的思路和求助
- 安卓第十四天笔记-内容提供者(ContentProvider)
- git 本地分支与远程分支关联的一种方法
- lintcode 中等题:unique Binary Search Tree 不同的二叉查找树
- 删掉SafeDrv病毒(这个病毒有点意思)
- 建立Hibernate二级Cache
- Nginx + Apache 反向代理
- kali linux安装搜狗输入法的方法
- css3 实现波浪(wave)效果
- 关于boost中enable_shared_from_this类的原理分析
- centos中PATH环境变量查看和修改
- 四、springboot(一)入门
- c#中的as,is和强转
- 洛谷 p2530 化工场装箱员(资源型)
- .NET平台常用框架整理
- uva11806(容斥原理)
热门文章
- Linux修改启动界面、分辨率
- Python之面向对象新式类和经典类
- 华中农业大学第四届程序设计大赛网络同步赛-1020: Arithmetic Sequence,题挺好的,考思路;
- 转盘抽奖 canvas &; 抽奖 H5 源码
- Node.js &; module system
- [USACO08NOV]时间管理Time Management
- Thinkphp5.0 的Db操作
- hdu - 1113 Word Amalgamation (stl)
- hdu - 1195 Open the Lock (bfs) &;&; hdu 1973 Prime Path (bfs)
- CLR GC