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优化速度方案仍然主要有这么几个方面:去除无需加载的模块.取消冗余的配置.去除不 ...
随机推荐
- mac apache 配置
mac系统自带apache这无疑给广大的开发朋友提供了便利,接下来是针对其中的一些说明 一.自带apache相关命令 1. sudo apachectl start 启动服务,需要权限,就是你计算机的 ...
- laravel学习笔记3--高级
一.artisan 1.基本使用: 1.1.查看基本命令: php artisan 1.2.查看具体命名的使用: php artisan help migrate 1.3.创建控制器: php art ...
- Bash的循环结构(for和while)
在bash有三中类型的循环结构表达方法:for,while,until.这里介绍常用的两种:for和while. for bash的for循环表达式和python的for循环表达式风格很像: for ...
- 从Hadoop框架讨论大数据
[Hadoop是什么?] 1)Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构. 2)主要解决,海量数据的存储和海量数据的分析计算问题. 3)广义上来说,HADOOP 通常是指一 ...
- markman & psd
markman & psd MarkMan 设计稿标 & 测量神器 http://www.getmarkman.com/ https://www.jianshu.com/p/83af3 ...
- Quartz进一步学习与使用
一.再思考 了解Quartz.NET的基本使用方法了.但如果想方便的知道某个作业执行情况,需要暂停,启动等操作行为,这时候就需要个Job管理的界面,如何才能达到我们想到的效果,查看相关Quartz.n ...
- 被老板逼着实现了Excle的透视表分析算法
package com.example.demo; import java.sql.SQLException;import java.util.ArrayList;import java.util.H ...
- POJ 1061 青蛙的约会【扩欧】
题意: 两只青蛙在地球同一纬度不同位置x,y向同一方向跳,每只青蛙跳的长度不同m,n,纬线总长度l,问两只青蛙是否能相遇,跳几次才相遇. 分析: 可知,问题可转化为求(m−n)∗a≡(y−x)(mod ...
- Orcle定时生成表数据作业
--建表 create table table41( id ) not null, --主键 col1 ), col2 ), col3 ), col4 int, col5 timestamp, col ...
- 牛腩新闻系统(一)——UML、数据库设计
牛腩新闻系统(一)--UML.数据库设计 一.初识牛腩系统 牛腩(Brisket)即牛腹部及靠近牛肋处的松软肌肉,是指带有筋.肉.油花的肉 块.这是一种统称. 若依部位来分,牛身上很多地方的肉都能够叫 ...