Solr技术方案一用户需求以前的互动平台只能对固定表的固定字段做like这样的数据库层面的索引,性能低下,用户体验很差,很难满足业务提出的简化搜索的需求。
需求原型:业界通用的做全站搜索的基本上两种:1 选择googleAPI,百度API做。
同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,而且全站的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 方便的导入数据。
6 Facet的轻松配置7 扩展性。
二Solr的体系结构体系结构Solr体系,功能模块介绍及配置。
以上是solr的架构图。
具体应用时需要理解一下模块的作用及配置。
RequestHandler:接受请求,分发请求。
另外也包含导入数据,如importhandler。
UpdateHandlers –处理索引请求。
Search Components:作为handlder的成员变量。
处理请求。
Facet:分类搜索Tika:apache下处理文件的一个项目。
Filter,spelling :处理字符串Http query/update Database/html importhandler 默认基本可以满足要求。
如果不够则扩展相应的handler和component。
丰富的客户端Ruby/php/java/json/javascript使用solrj以上的配置在solrconfig.xml,schema.xml中配置分词的解决办法系统提供了很多种分词方案。
StopAnalyzer,StandardAnalyzer,WhitespaceAnalyzer只是实现了数字、单词、E-mail 地址、IP地址以及中文字符的分析处理,但是对于中文的分析并不好。
对于中文分词有几种解决方案。
∙Paoding: 100万汉字/s(https:///p/paoding/)∙Imdict:26万汉字/s (https:///p/imdict-chinese-analyzer/)∙Ik:160万汉字/s (https:///p/ik-analyzer/)∙Mmseg4j:simple 1900kb/s 准确率98%(https:///p/mmseg4j/)注:官方提供测试环境各不相同。
这里我们选择准确率最高的Mmseg4j。
而且配置起来也十分简单。
我们只是需要在schema中配置以下fieldType即可。
<fieldType name="textComplex" class="solr.TextField"positionIncrementGap="100"><analyzer type=”index”><tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"mode="complex" dicPath="../dic" /><filter class="solr.StopFilterFactory" ignoreCase="true"words="stopwords.txt" /></analyzer><analyzer type=”query”><tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"mode="complex" dicPath="../dic" /><filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"ignoreCase="true" expand="true" /><filter class="solr.StopFilterFactory" ignoreCase="true"words="stopwords.txt" /></analyzer></fieldType>三搭建方法及配置安装solr版本:V4.31. 去apache网站/solr/ 下载Solr4.32. 新建目录/usr/local/solr3. 将solr-4.3.0/dist/solr-4.3.0.war 复制到/usr/local/solr下,重命名为solr.war4. 将solr-4.3.0/example/lib/ext下的包复制到Tomcat/lib目录下5. 新建目录/usr/local/solr/solr_home 作为solr 实例的跟目录6. 将solr解压目录中的contrib,dist,example/solr/* 复制到solr_home7. 在solr_home下新建lib目录,mkdir lib8. 从dist/program/smsehome-solr/lib/拷贝除了solr-dataimporthandler-mongo-1.0.0.jar之外的jar文件,中文分词包和数据库驱动包放到lib下。
目录结构如下:└─libmmseg4j-analysis-*.jarmmseg4j-core-*.jarmmseg4j-solr-*.jarmongo-java-driver-*.jarmysql-connector-java-*-bin.jar9. 将smsehome-solr/lib/solr-dataimporthandler-mongo-1.0.0.jar导入到disc目录下10. 在solr_home下新建dic目录,mkdir dic。
11. 文件结构如下└─solr_homebin/collection1/contrib/dic/dist/lib/README.txtsolr.xmlZoo.cfg12. 拷贝发布文件data-config.xml ,solrconfig.xml ,schema.xml,solrcore.properties 到/usr/local/solr/solr_home/collection1/conf/ 目录下。
13. 修改solrcore.propertiesdb_driver=com.mysql.jdbc.Driverdb_url=jdbc:mysql://172.26.1.110:3306/smsehomedb_user=irmuserdb_passwd=irmusermongodb_host=172.26.1.110mongodb_port=27017mongodb_database=adminmongodb_username=adminmongod_password=BussINEssHome2013file_path=http://172.31.16.233:8080/smsehome-web/showPicMongo.do?uploadFileMong oId修改红色部分的配置。
以db开头的mysql数据源,以mongodb开头的时候mongodb数据源。
单机环境到此就配置好了。
打开http://ip:8080/solr/#/ 可以看到dashboard和collection1表示安装成功。
打开http://ip:8080/solr/browse可以看到索引内容为空。
集群安装与配置1下载zookeeper/并解压zookeeper。
新建zoo/data目录,用于存放zookeeper 的数据。
进入到目录zookeeper/conf 复制zoo_sample.cfg 为zoo.cfg,编辑zoo.cfg: dataDir= /zoo/dataclientPort=2181server.1=192.168.1.11:2888:3888server.2=192.168.1.12:2888:3888server.3=192.168.1.13:2888:3888dataDir设置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.sh start。
按照上面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(.bat windows):JAVA_OPTS=”-DzkHost=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:218 1”此处仅配置-DzkHost即可,所有solr配置均从zookeeper中获取。