Solr的使用进行的调研

摘要:本篇是本人对Solr的使用进行的调研,具体包括


使用DataImportHandler从数据库中近实时同步数据、测试Solr创建索引的效率、以及测试Solr的搜索效率等。


具体的搜索引擎概念、Solr搭建方法、数据库mysql使用方法,假设读者已有了基础。

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搜索方式



交集:{name:亿度 AND address:海淀} {text:海淀 AND 亿度}。


联集:{name:亿度 OR address:海淀} {text:海淀 OR 亿度}。


排除:{text:海淀 -亿度}。


通配符:{bank:中国*银}。


范围:{num:[30 TO60]}。


分页:start rows


排序:sort


Group 权重中文分词 ...

1.4  亿级数据搜索速度



本节测试是基于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 结论:

范围越大,结果数据越多,搜索花费时间越长。

第一次搜索较慢,后来时间花费较少。

来自为知笔记(Wiz)

Solr的使用进行的调研,布布扣,bubuko.com

时间: 2024-08-07 18:48:08

Solr的使用进行的调研的相关文章

BugPhobia开发篇章:Alaph阶段Scurm Meeting

0x01 :目录与摘要 If you weeped for the missing sunset, you would miss all the shining stars 索引 提纲 整理与更新记录节点 起始记录时间 终止记录时间 0x01 目录与摘要 初次整理于2015/10/23 2015/10/23 12:00 A.M. -- 0x02 Alaph阶段第一次Scrum Meeting 初次整理于2015/10/24 2015/10/23 12:00 A.M. 2015/10/24 12:

Solr调研总结(转)

Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试.两个核心配置文件介绍.中文分词器配置.维护索引.查询索引,高亮显示.拼写检查.搜索建议.分组统计.自动聚类.相似匹配.拼音检索等功能的使用方法. 在代码文本框中如有显示不全的,请在文本框中按Ctrl+A再复制. 版本 作者/修改人 日期 V1.0 gzk 2013-06-04 1. Solr 是什么? Solr它是一种开放源码的.基于 Luce

BugPhobia沟通篇章:Solr模式配置与数据导入调研

0x01 :Scrum Meeting特别说明 特别说明,考虑到编译原理课程考核的时间安排,每天开发时间急剧缩短以至于难以维系正常的Scrum Meeting,因此,将2015/12/13 00:00 A.M. ~ 2015/12/14 22:00 P.M.的Scrum Meeting合并,因此,第二次Scrum Meeting的开发时间为两天,此次将首先发布Solr模式配置与数据导入调研方便沟通工作的进一步开展 0x01 :模式配置说明(Schema.xml) 0x0100 :types段落定

Elasticsearch VS Solr

最近公司用到了ES搜索引擎,调研发现大公司常用的搜索引擎还有Solr. 鉴于 Lucene 强大的特性和稳定性,有很多种基于 Lucene 封装的企业级搜索平台.其中最流行有两个:Apache Solr 和 Elastic search. Apache Solr:它本身是 Apache Lucene 项目下的开源企业搜索平台,算是 Lucene 的直系.美团.阿里搜索服务是基于 Solr 来搭建的. Elastic Search:简称 ES,由 Elastic 公司开发.Elastic 成立于

搜索引擎选择: Elasticsearch与Solr

搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据. 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合. Elasticsearch是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,可以说Lucene是当今最先进,最高效的全功能开源搜索引擎框架. 但是Lucene只是一个框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene.

solr入门教程

Solr 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示.拼写检查.搜索建议.分组统计.拼音检索等功能的使用方法. 1. Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中.Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式).它易于安装和配置,而且附带了一个基于HT

Solr入门和实践以及我对Solr的8点理解

友情提示Solr的内容还是比较多的,一篇文章只能讲解一部分.全面介绍,没兴趣,没时间,也没能力,回报还不大.本文只写点我认为比较重要的知识点,独特的个人想法.仅供参考哦,更多细节需要自己去琢磨. 概述Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎. 工作方式文档通过Http利用XML 加到一个搜索集

Solr和ES对比

Solr与ES(ElasticSearch)对比 搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据. 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合. Elasticsearch是一个建立在全文搜索引擎 Apache Lucene? 基础上的搜索引擎,可以说Lucene是当今最先进,最高效的全功能开源搜索引擎框

搜索引擎选择: Elasticsearch与Solr(转载)

原文地址:http://www.cnblogs.com/chowmin/articles/4629220.html 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据. 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合. Elasticsearch是一个建立在全文搜索引擎 Apache Lucene? 基础上的搜索引擎,可以说Lucene是当今最先进,最高效的全功能开