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(模糊查询,其中构造器第二个参数代表可缺少字符数)
luence优化速度的更多相关文章
- Eclipse优化集合,Eclipse优化速度,解决Ctrl+C、Ctrl+V卡
Eclipse优化集合,Eclipse优化速度,解决Ctrl+C.Ctrl+V卡 >>>>>>>>>>>>>>> ...
- 用户选择wordpress程序建站需要知道的一些事情 - 安全、优化速度、配置
WordPress是我们使用最多的CMS程序之一,无论是我们的个人博客,还是企业网站,甚至中小型站点,我们都可以用WP程序部署.我们看到海外网站的时候,大部分都是用的WORDPRESS程序.在我们国人 ...
- vue+webpack+element-ui项目打包优化速度与app.js、vendor.js打包后文件过大
从开通博客到现在也没写什么东西,最近几天一直在研究vue+webpack+element-ui项目打包速度优化,想把这几天的成果记录下来,可能对前端牛人来说我这技术比较菜,但还是希望给有需要的朋友提供 ...
- 埃氏筛优化(速度堪比欧拉筛) + 洛谷 P3383 线性筛素数 题解
我们一般写的埃氏筛消耗的时间都是欧拉筛的三倍,但是欧拉筛并不好想(对于我这种蒟蒻) 虽然 -- 我 -- 也可以背过模板,但是写个不会的欧拉筛不如写个简单易懂的埃氏筛 于是就有了优化 这个优化还是比较 ...
- [COCOS2DX]交叉编译实践+速度优化(vs2012修改win32代码+修改makefile+编译安卓项目包+部署安卓项目包到Eclipse+运行apk)
通过前面的部署过程可以知道cocos2dx的开发过程如下: 1.VS2012完成修改 2.因为指定了CPP文件位置,ndk可以通过jni方式完成C++文件的编译,运行以下命令完成proj.androi ...
- [转]论magento1和magento2的速度性能优化问题
本文转自:http://www.360magento.com/blog/magento-speed-up/ magento从2007年发展至今,也经历了十余年的磨练,如今也迎来了magento的换代产 ...
- Webpack 打包优化之速度篇
在前文 Webpack 打包优化之体积篇中,对如何减小 Webpack 打包体积,做了些探讨:当然,那些法子对于打包速度的提升,也是大有裨益.然而,打包速度之于开发体验和及时构建,相当重要:所以有必要 ...
- 【转】MyEclipse 2015优化技巧
MyEclipse 2015优化技巧 MyEclipse 2015优化速度方案仍然主要有这么几个方面:去除无需加载的模块.取消冗余的配置.去除不必要的检查.关闭更新. 第一步: 去除不需要加载的模块 ...
- MyEclipse 2013优化配置【转】
作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs MyEclipse 2013优化速度方案仍然主要有这么几个方面:去除无需加载的模块.取消冗余的配置.去除不 ...
随机推荐
- [Python3网络爬虫开发实战] 2.4-会话和Cookies
在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问,而且登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录.还有一些网站,在打开浏览器时就自动登录了,而且 ...
- Python之面向对象新式类和经典类
Python之面向对象新式类和经典类 新式类和经典类的继承原理: 在Python3中,就只有新式类一种了. 先看Python3中新式类: 类是有继承顺序的: Python的类是可以继承多个类的,也就是 ...
- Python之面向对象方法
Python之面向对象方法 property的用法: property属于类的封装的范畴 property是一种特殊的属性,访问它时会执行一段功能(函数),然后返回值. 用property的方法,就可 ...
- rbac组件之权限初始化(五)
当用户登陆后,根据用户的角色要为用户生成对应的权限菜单,此时需要将登陆的用户信息获取且获取角色信息,从数据库中获取菜单以及权限信息,并且存入session中. 1.权限流程 第一次请求的页面是登陆页面 ...
- 如何实现IIS 7.0对非HTTP协议的支持
在<再谈IIS与ASP.NET管道>介绍各种版本的IIS的设计时,我们谈到IIS 7.0因引入WAS提供了对非HTTP协议的支持.这个对于WCF的服务寄宿来说意义重大,它意味着我们通过II ...
- [K/3Cloud] 隐藏菜单后,如何在插件间接的调用隐藏菜单的操作
使用场景: 动态表单里面挂了个单据的序时薄,序时薄有菜单,但是把序时薄的工具栏隐藏了.新增,修改全部动态表单自己写.删除和过滤我想间接调用下隐藏的序时薄的删除和过滤按钮的操作.在插件里如何实现? 答: ...
- Spring Cloud(5):Hystrix的使用
熔断:类似生活中的保险丝,电流过大就会熔断 降级:类似生活中的旅行,行李箱只有那么大,所以要抛弃一些非必需的物品 熔断降级应用: 某宝双十一商品下单,用户量巨大,于是考虑抛弃相关商品推荐等模块,确保该 ...
- Servlet的过滤器(Filter)
以下内容引用自http://wiki.jikexueyuan.com/project/servlet/writing-filters.html: Servlet过滤器是Java类,可用于Servlet ...
- JSP国际化设置
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/internationalization.html: 国际化(i18n):这意味着可以使网站根据访问者的语 ...
- searchIndexer.exe占用过高CPU
1.searchIndexer.exe占用过高CPU很可能是Windows的索引损坏造成的. 这时候只要进入控制面板—索引选项—高级—重建即可解决 2. net stop "windows ...