solr技术方案.docx
- 文档编号:6103635
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:12
- 大小:621.42KB
solr技术方案.docx
《solr技术方案.docx》由会员分享,可在线阅读,更多相关《solr技术方案.docx(12页珍藏版)》请在冰豆网上搜索。
solr技术方案
Solr技术方案
一用户需求
以前的互动平台只能对固定表的固定字段做like这样的数据库层面的索引,性能低下,用户体验很差,很难满足业务提出的简化搜索的需求。
需求原型:
业界通用的做全站搜索的基本上两种:
1选择googleAPI,XXAPI做。
同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,而且全站的SEO做的也不是很好,对于动态的很多ajax请求需要做快照,所以暂时不采用。
2选择现有成熟的框架。
这里我们选择使用solr。
Solr是一个基于Lucene的Java搜索引擎服务器。
Solr提供了层面搜索、命中醒目显示并且支持多种输出格式(包括XML/XSLT和JSON格式)。
它易于安装和配置,而且附带了一个基于HTTP的管理界面。
Solr已经在众多大型的网站中使用,较为成熟和稳定。
Solr包装并扩展了Lucene,所以Solr的基本上沿用了Lucene的相关术语。
更重要的是,Solr创建的索引与Lucene搜索引擎库完全兼容。
通过对Solr进行适当的配置,某些情况下可能需要进行编码,Solr可以阅读和使用构建到其他Lucene应用程序中的索引。
此外,很多Lucene工具(如Nutch、Luke)也可以使用Solr创建的索引。
这里我们主要需要以下几种功能:
1可用性及成熟性。
2中文分词。
3词库与同义词的管理(比如我们使用最高的:
股票代码)。
4高亮显示。
5方便的导入数据。
6Facet的轻松配置
7扩展性。
二Solr的体系结构
体系结构
Solr体系,功能模块介绍及配置。
以上是solr的架构图。
具体应用时需要理解一下模块的作用及配置。
RequestHandler:
接受请求,分发请求。
另外也包含导入数据,如importhandler。
UpdateHandlers–处理索引请求。
SearchComponents:
作为handlder的成员变量。
处理请求。
Facet:
分类搜索
Tika:
apache下处理文件的一个项目。
Filter,spelling:
处理字符串
Httpquery/updateDatabase/htmlimporthandler默认基本可以满足要求。
如果不够则扩展相应的handler和component。
丰富的客户端
Ruby/php/java/json/javascript
使用solrj
以上的配置在solrconfig.xml,schema.xml中配置
分词的解决办法
系统提供了很多种分词方案。
StopAnalyzer,StandardAnalyzer,WhitespaceAnalyzer只是实现了数字、单词、E-mail地址、IP地址以及中文字符的分析处理,但是对于中文的分析并不好。
对于中文分词有几种解决方案。
☉Paoding:
100万汉字/s()
☉Imdict:
26万汉字/s(zer/)
☉Ik:
160万汉字/s()
☉Mmseg4j:
simple1900kb/s准确率98%()
注:
官方提供测试环境各不相同。
这里我们选择准确率最高的Mmseg4j。
而且配置起来也十分简单。
我们只是需要在schema中配置以下fieldType即可。
三搭建方法及配置
安装
solr版本:
V4.3
1.去apache网站下载Solr4.3
2.新建目录/usr/local/solr
3.将solr-4.3.0/dist/solr-4.3.0.war复制到/usr/local/solr下,重命名为solr.war
4.将solr-4.3.0/example/lib/ext下的包复制到Tomcat/lib目录下
5.新建目录/usr/local/solr/solr_home作为solr实例的跟目录
6.将solr解压目录中的contrib,dist,example/solr/*复制到solr_home
7.在solr_home下新建lib目录,mkdirlib
8.从dist/program/smsehome-solr/lib/拷贝除了solr-dataimporthandler-mongo-1.0.0.jar之外的jar文件,中文分词包和数据库驱动包放到lib下。
目录结构如下:
└─lib
mmseg4j-analysis-*.jar
mmseg4j-core-*.jar
mmseg4j-solr-*.jar
mongo-java-driver-*.jar
mysql-connector-java-*-bin.jar
9.将smsehome-solr/lib/solr-dataimporthandler-mongo-1.0.0.jar导入到disc目录下
10.在solr_home下新建dic目录,mkdirdic。
11.文件结构如下
└─solr_home
bin/
collection1/
contrib/
dic/
dist/
lib/
README.txt
solr.xml
Zoo.cfg
12.拷贝发布文件data-config.xml,solrconfig.xml,schema.xml,solrcore.properties
到/usr/local/solr/solr_home/collection1/conf/目录下。
13.修改solrcore.properties
db_driver=com.mysql.jdbc.Driver
db_url=jdbc:
mysql:
//172.26.1.110:
3306/smsehome
db_user=irmuser
db_passwd=irmuser
mongodb_host=172.26.1.110
mongodb_port=27017
mongodb_database=admin
mongodb_username=admin
mongod_password=BussINEssHome2013
修改红色部分的配置。
以db开头的mysql数据源,以mongodb开头的时候mongodb数据源。
单机环境到此就配置好了。
打开可以看到dashboard和collection1表示安装成功。
打开可以看到索引内容为空。
集群安装与配置
1下载zookeeper
并解压zookeeper。
新建zoo/data目录,用于存放zookeeper的数据。
进入到目录zookeeper/conf复制zoo_sample.cfg为zoo.cfg,编辑zoo.cfg:
dataDir=/zoo/data
clientPort=2181
server.1=192.168.1.11:
2888:
3888
server.2=192.168.1.12:
2888:
3888
server.3=192.168.1.13:
2888:
3888
dataDir设置zookeeper数据存放目录绝对路径
clientPort设置Zookeeper链接端口
server.i设置集群中服务器的IP及端口号,i代表第几个服务器,与之对应的,需要在zoo/data中新建myid文件,文件内容为对应的i。
集群安装:
分别在192.168.1.11,192.168.1.12,192.168.1.13上安装,/zoo/data/myid文件内容分别为配置中对应的1,2,3。
2启动zookeeper.
启动zookeeper。
zkServer.shstart。
按照上面server的顺序启动。
Server.1,server.2,server.3。
3配置tomcat。
将上面配置好的tomcat复制3份,把相应的solr.xml文件指定到工程目录。
4配置其中一台为
JAVA_OPTS=”-Dbootstrap_confdir=/solr_home/collection1/conf-Dcollection.configName=clusterconf-DzkHost=192.168.1.11:
2181,192.168.1.12:
2181,192.168.1.13:
2181-DnumShards=2”
参数:
-Dbootstrap_confdir为solr的配置文件目录
-Dcollection.configName为solrCloud配置显示名
-DzkHost为zookeeper服务器列表,逗号隔开
-DnumShards为分片个数
在其他机器
分别在192.168.1.2,192.168.1.3,192.168.1.4上配置/tomcat/bin/catalina.sh(.batwindows):
JAVA_OPTS=”-DzkHost=192.168.1.11:
2181,192.168.1.12:
2181,192.168.1.13:
2181”
此处仅配置-DzkHost即可,所有solr配置均从zookeeper中获取。
5修改solr.xml
solr_home/solr.xml中的hostPort="8080"改为tomcat的启动端口
6启动tomcat
启动顺序:
首先启动指定了bootstrap_confdir的tomcat,然后启动其他solr的tomcat。
四互动应用(POC)
应用方案设计
互动社区化应用架构图
需要索引的表
互动问题、回复、评论相关表:
TB_IRCS_QUESTION等
活动信息表:
TB_IRCS_ACTIVITY等
主题表:
TB_IRCS_SUBJECT等
注册用户表TB_IRCS_INVESTOR等
话题表:
TB_IRCS_TOPIC等
视频表TB_IRCS_VIDEO等
高管表TB_IRCS_COMP_LINKMAN,TB_IRCS_INVESTOR等。
Facet
具体整理一个《索引字段对应关系表.xls》
搜索引擎配置
全局配置
Solrconfig配置
1配置系统和自己实现的dataimporthandler的jar包路径
2solr索引的路径
}
3solr的查询接口
其中要配置facet信息,高亮信息和字段的权重信息。
4solr的更新接口
使用默认字段即可。
5使用数据库导入索引的配置
其中data-config.xml配置需要索引的数据库的信息、表名以及索引的字段。
Scheme配置
主要分为一下几块:
Fields、types和copyField的定义
Types定义:
name:
标识字段。
在fields中要引用到。
class和其他属性决定了这个fieldType的实际行为。
(class以solr开始的,都是在org.appache.solr.analysis包下)
其中我们需要配置中文分词
上面是基于Mmseg4j的标准配置。
我们需要维护词库"dicPath=dic
Spelling.txt,同义词库:
synonyms.txt、停词库stopwords.txt.
Fields配置
所有的facet都要在schema中定义一种类型。
在配置文件中配置。
例如:
将相应表的字段都配置到schema中。
其中有四个参数:
Name:
要索引的字段名
Type:
solr定义的类型。
通常我们会加分词插件的类型。
就是上面types里配置的字段。
indexed:
是否被用来建立索引(关系到搜索和排序)
stored:
是否储存
compressed:
[false],是否使用gzip压缩(只有TextField和StrField可以压缩)
mutiValued:
是否包含多个值
omitNorms:
是否忽略掉Norm,可以节省内存空间,只有全文本field和needanindex-timeboost的field需要norm。
(具体没看懂,注释里有矛盾)
termVectors:
[false],当设置true,会存储termvector。
当使用MoreLikeThis,用来作为相似词的field应该存储起来。
termPositions:
存储termvector中的地址信息,会消耗存储开销。
termOffsets:
存储termvector的偏移量,会消耗存储开销。
default:
如果没有属性需要修改,就可以用这个标识下。
copyField的配置
例如:
将多个field的数据放在一起同时搜索,提供速度将一个field的数据拷贝到另一个,可以用2种不同的方式来建立索引。
精确匹配和模糊匹配。
对于schema的配置情况,可以采用admin界面测试。
Analysis中FieldValue(Index)显示是如何构建索引的。
右侧FieldValue(Query)显示查询是如何分解索引的。
客户端API
索引更新API
--Thedefaulthigh-performanceupdatehandler-->
等
:
port/update?
qt
第二种dataimporthandler,参见solr的维护界面。
信息查询API
:
port/query?
qt=
配置,在solrconfig.xml中配置请求的url。
其中可以配置分词的权重,页面需要的facet信息,高亮的信息。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- solr 技术 方案