关于Solr的使用总结的心得体会
摘要:在项目中使用Solr作为搜索引擎对大数据量创建索引,提供服务,本文是作者对Solr的使用总结的一点心得体会,
具体包括使用DataImportHandler从数据库中近实时同步数据、测试Solr创建索引的性能、以及测试Solr的搜索效率总结等。
具体搜索引擎概念、Solr搭建方法、数据库mysql使用方法,假设读者已有了基础。本文操作均是在linux上进行的。
1. Solr
1.1 Solr从数据库中读取数据并创建索引速度(使用DataImportHandler)
l 一次性创建索引
在JVM内存配置为256M时,建立索引至1572865时出现Java heap异常;增加JVM内存配置至512M,设置系统环境变量:JAVA_OPTS -Xms256m -Xmx512m,能成功建立2112890条(花费2m 46s)。
平均索引创建速度为:12728/s(两个string字段,长度大约为20字符)。
l 增量创建索引
注意:近实时增量索引需要写数据库服务的时间与搜索引擎服务器时间同步(数据库服务时间先于搜索引擎服务器时间才行)。
使用默认的DIH创建增量索引速度较慢(50/s~400/s),不如全索引(1W/s),因为需要从数据库中读取多遍(1、要更新的IDs;2、每1ID去数据库中重取所有列)。
故需要更改DIH增量索引程序,以全索引的方式读数据;或采取全读出的方式,一次全读出所有列,具体文件配置如下:
|
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource name="mysqlServer" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" batchSize="-1" url="jdbc:mysql://192.103.101.110:3306/locationplatform" user="lpuser" password="jlitpassok"/> <document> <entity name="locatedentity" pk="id" query="select id,time from locationplatform.locatedentity where isdelete=0 and my_date > '${dataimporter.last_index_time}'" deletedPkQuery="select id from locationplatform.locatedentity where isdelete=1 and my_date > '${dataimporter.last_index_time}'" deltaQuery="select -1 id" deltaImportQuery="select id,time from locationplatform.locatedentity where isdelete=0 and my_date > '${dataimporter.last_index_time}'"> <field column="id" name="id"/> <field column="time" name="time"/> </entity> </document> </dataConfig> |
通过这样的配置可以达到增量索引9000/s(两个string字段)(数据库里对时间建立索引,对这里的性能影响不大)。
l 注意:作者不推荐使用DataImportHandler,有其它更好更方便的实现可以使用。
1.2 Solr创建索引效率
l ConcurrentUpdateSolrServer使用http方式,embedded方式官方不推荐使用。ConcurrentUpdateSolrServer不需要commit,solrServer.add(doc)即可添加数据。SolrServer solrServer = newConcurrentUpdateSolrServer(solrUrl, 队列大小, 线程数)其需要与autoCommit、autoSoftCommit配置搭配使用,网上建议配置如下:
|
<autoCommit> <maxTime>100000(1-10min)</maxTime> <openSearcher>false</openSearcher> </autoCommit> <autoSoftCommit> <maxTime>1000(1s)</maxTime> </autoSoftCommit> |
17个各种类型字段(原纯文本Size约为200B,SolrInputDocument对象Size约为930B),以只保存ID、每字段均建立索引的方式创建索引。
如需具体的测试代码可以联系本人。
l 17个字段,四核CPU,16G内存,千兆网络
|
数据量(W条) |
线程数 |
队列大小 |
时间(s) |
网络(MB/s) |
速率(W条/s) |
|
200 |
20 |
10000 |
88 |
10.0 |
2.27 |
|
200 |
20 |
20000 |
133 |
9.0 |
1.50 |
|
200 |
40 |
10000 |
163 |
10.0 |
1.22 |
|
200 |
50 |
10000 |
113 |
10.5 |
1.76 |
|
200 |
100 |
10000 |
120 |
10.5 |
1.67 |
l 速度:Solr创建索引速度与Solr机器CPU正相关,一般情况下CPU占用率能达到接近100%,内存占用率在默认情况下需达到接近100%,网络、磁盘占用率均小。因此创建索引的效率瓶颈在CPU及内存。当内存占用率维持在接近100%,索引大小达到物理内存大小时,插入新的数据容易出现OOM错误,这时需要使用ulimit –v unlimited命令更改virtual memory配置为unlimited再启动Solr便不会出现OOM错误。在64位机器系统上,官方推荐使用MMapDirectory。
l NRTCachingDirectory速度偏慢,会在某一时间索引添加停滞,Size先大后小,减小后索引添加继续。
l 大小:1亿索引大小约为13-16GB,2亿索引大小约为30GB。
1.3 Solr搜索方式
l 交集:{name:亿度 AND address:海淀} {text:海淀 AND 亿度}。
l 联集:{name:亿度 OR address:海淀} {text:海淀 OR 亿度}。
l 排除:{text:海淀 -亿度}。
l 通配符:{bank:中国*银}。
l 范围:{num:[30 TO60]}。
l 分页:start rows
l 排序:sort
l Group 权重中文分词 ...
1.4 亿级数据搜索速度
l 本节测试是基于1.2节创建的索引上的。
l精确搜索
|
数据量(亿条) |
字段数 |
字段类型 |
时间(ms) |
|
1 |
1 |
long |
1 |
|
1 |
1 |
double |
80-1400 |
|
1 |
1 |
string |
7-800 |
|
1 |
1 |
date |
2-400 |
|
1 |
2(OR) |
long |
2 |
|
1 |
2(OR) |
double |
200-2400 |
|
1 |
2(OR) |
string |
500-1000 |
|
1 |
2(OR) |
date |
5-500 |
l 模糊搜索
|
数据量(亿条) |
字段数 |
字段类型 |
时间(ms) |
|
1 |
1 |
long |
2000-10000 |
|
1 |
1 |
double |
1000-17000 |
|
1 |
1 |
string |
20-16000 |
|
1 |
1 |
date |
/ |
|
1 |
2(OR) |
long |
3000-25000 |
|
1 |
2(OR) |
double |
7000-45000 |
|
1 |
2(OR) |
string |
3000-48000 |
|
1 |
2(OR) |
date |
/ |
l 范围搜索
|
数据量(亿条) |
字段数 |
字段类型 |
时间(ms) |
|
1 |
1 |
long |
6-46000 |
|
1 |
1 |
double |
80-11000 |
|
1 |
1 |
string |
7-3000 |
|
1 |
1 |
date |
1000-2000 |
|
1 |
2(OR) |
long |
100-13000 |
|
1 |
2(OR) |
double |
100-60000 |
|
1 |
2(OR) |
string |
3000-13000 |
|
1 |
2(OR) |
date |
7000-10000 |
l 结论:
范围越大,结果数据越多,搜索花费时间越长。
第一次搜索较慢,后来时间花费较少。
关于Solr的使用总结的心得体会的更多相关文章
- 加快FineReport报表设计的几个心得体会
加快FineReport报表设计的几个心得体会 一.从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的SQL语句”,这样可提高设计速度.否则每次设计时模板均要从远程读取数据,速度相当慢 ...
- 十天来学习java的心得体会
有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...
- Git的基本使用方法和安装&心得体会
1. git的安装和github的注册.代码托管.创建organization.邀请member. (1)git的安装 因为我电脑是windows系统,所以下载的是git for windows.在官 ...
- "琳琅满屋"调查问卷 心得体会及结果分析
·关于心得体会 当时小组提出这个校园二手交易市场的时候,就确定了对象范围,仅仅是面向在校大学生,而且在我们之前就已经有了很多成功的商品交易的例子可以让我们去借鉴,再加上我们或多或少的有过网 ...
- 关于多本小说站的SEO—从”易读中文网”获得的心得体会
从目前国内的网站流量来说,电影站,小说站,游戏站等的流量占总流量的比例还是很高的,许多站长把目光投入到了这几个方面,本文就着重来说对于小说站,尤其是多本小说站的SEO心得体会! 对于小说站来说,只要排 ...
- AngularJS心得体会
AngularJS早些时候有过了解,知道这是一个JS的MVC框架,同类型的框架还有Backbone等.这次是由于项目需要,学习了两天的Angular后开始着手改之前的项目代码,这里大概说一下这一周学习 ...
- 关于Dropdownlist使用的心得体会
2013-07-23关于Dropdownlist使用的心得体会: Dropdownlist使用最多的几个属性: 一.Dropdownlist.Items,负责包含所有选项的容器 DropDownLis ...
- xp硬盘安装Fedora14 过程记录及心得体会(fedora14 live版本680M 和fedora14 DVD版本3.2G的选择)
这次电脑奔溃了,奇怪的是直接ghost覆盖c盘竟然不中.之前电脑上硬盘安装的fedora14操作系统,也是双系统.不知道是不是这个问题,记得同学说过,在硬盘装fedora之后,要手动修改c盘隐藏的那个 ...
- 使用Webbrowser的一点心得体会
原文:使用Webbrowser的一点心得体会 自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就用这个写的,慢慢也有点体会了,总结一下, ...
随机推荐
- Bubble Cup 8 finals B. Bribes (575B)
题意: 给定一棵n个点和有向边构成的树,其中一些边是合法边,一些边是非法边, 经过非法边需要1的费用,并且经过之后费用翻倍. 给定一个长为m的序列,问从点1开始按顺序移动到序列中对应点的总费用. 1& ...
- 在使用 HttpWebRequest Post数据时候返回 400错误
笔者有一个项目中用到了上传zip并解压的功能.开始觉得很简单,因为之前曾经做过之类的上传文件的功能,所以并不为意,于是使用copy大法.正如你所料,如果一切很正常的能运行的话就不会有这篇笔记了. 整个 ...
- python --> 正则表达式
在python中使用正则表达式,需要导入 re 模块 一. 元字符,包括 [] {} | ? * + . ^ $ \ () . 号:通配符,一个点号就代表一个字符,一般情况下不能通配换行符 \ ...
- T1加权像(T1 weighted image,T1WI)
T1加权成像(T1-weighted imaging,T1WI)是指这种成像方法重点突出组织纵向弛豫差别,而尽量减少组织其他特性如横向弛豫等对图像的影响. 弛豫:物理用语,从某一个状态恢复到平衡态的过 ...
- c语言经典算法—求0—7 所能组成的奇数个数
题目:求0—7 所能组成的奇数个数. 算法思想:这个问题其实是一个排列组合的问题,设这个数为sun=a1a2a3a4a5a6a7a8,a1-a8表示这个数的某位的数值,当一个数的最后一位为奇数时,那么 ...
- Linux安装ftp组件过程
1 安装vsftpd组件 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件. [root@bogon ~]# yum -y install vsftpd 2 ...
- MyBatis处理一行数据-MyBatis使用sum语句报错-MyBatis字段映射-遁地龙卷风
第二版 (-1)写在前面 我用的是MyBatis 3.2.4 (0) 编程轶事 select sum(value) ,sum(value2) from integral_list where Me ...
- 测试基础:Bug管理那些事_20160910
1.bug由来 虫子爬进主机引起继电器短路,导致机器故障.真正的缺陷是:主机散热孔少装了块金属丝,这样才能防止虫子爬到主机. 2.什么是bug? bug是缺陷的一种表现形式,而一个缺陷是可以引发多种b ...
- git用法之常用命令[克隆、提交]
1.克隆/下载项目 1)git clone git@git.soydai.cn:liuxuewen/static-file-3.0.git 或者 2)git clone http://git.soyd ...
- 教你怎么快速配置 React
导读 React 是一个构建用户界面的库,而它只是组成一个应用的一部分.应用还有其他的部分——风格.路由器.npm 模块.ES6 代码.捆绑和更多——这就是为什么使用它们的开发者不断流失的原因.这被称 ...