在百度中搜索“阿凡达”会出来一系列资料,有文本,图片,电影,链接等等,这就是一个搜索引擎实现的,当然百度有自己的搜索引擎,我们可以不用自己写一个搜索引擎,有现成的比如sorl,lucene,ElasticSearch等等,这里介绍一些solr。
Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。
Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene目前是 Apache Jakarta(雅加达) 家族中的一个开源项目。也是目前最为流行的基于Java开源全文检索工具包。目前已经有很多应用程序的搜索功能是基于Lucene ,比如Eclipse 帮助系统的搜索功能。Lucene能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。
Solr与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括 Solr: Solr是Lucene面向企业搜索应用的扩展。
Solr使用Lucene并且扩展了它!
Lucene是一个全文检索的工具包,它是一堆jar包,不能单独运行,即不能独立对外提供服务。
Solr是一个全文搜索服务器,它可以独立运行,它能独立对外提供搜索和索引服务。
使用lucene开发站内搜索的话,程序员编写的代码量会比较大,而且在搜索和索引流程得考虑他的性能。
使用solr开发站内搜索的话,程序员只需编写少量的代码,快速的搭建出来站内搜索功能。而且性能方面不需要程序员去考虑,solr对它已经进行了处理。
下图展示了solr的使用组织结构:
Solr也是Apache下一个项目,它是使用java开发的,它是基于Lucene的全文搜索服务器。
Solr如何进行索引和搜索:
索引:客户端(可以是浏览器可以是java程序)发送post请求到solr服务器,发给solr服务器一个文档(xml、json),就可以进行一个添加索引删除索引、修改索引的操作。
搜索:客户端(可以是浏览器可以是java程序)发送get请求到solr服务器,请求solr服务器给它响应一个结果文档(xml、json),程序员拿到这些文档就可以对其进行解析。进行视图渲染。
下载链接
进入链接后,选中Accept License Agreement,下载jdk-7u79-linux-x64.tar.gz。
下载链接
下载链接 进入solr5.4.0文件夹。
这样,我们所需要的solr环境搭建的组件都下载完毕了,下面着手安装与配置!
1. 卸载原有JDK
# yum remove java
2.将下载的JDK安装包,拷贝到【/usr/java】目录下,进行解压缩,把解压缩后的文件夹名改为jdk1.7。
# cd /usr/java
# tar -xzvf jdk-7u79-linux-x64.tar.gz
3. 修改profile配置文件。
# vim /etc/profile
4.在末尾加上如下3行配置:
export JAVA_HOME=/usr/java/jdk1.7
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
5. 使修改的配置文件生效:
# source /etc/profile
6. 验证:
# java -version
上传apache-tomcat-7.0.67.tar.gz到服务器的【/usr/local/solr/】目录下并解压重命名为tomcat7,使用命令给tomcat的bin目录下的脚本赋予可执行权限。
# chmod 777 /usr/local/solr/tomcat7/bin/*
将solr-5.4.0.tgz下载下来,上传到服务器的【/usr/local/solr/】目录下并重命名为sorl5,此时【/usr/local/solr/】目录下应该存在两个文件夹,tomcat7和solr5。
打开web.xml,修改内容为:(注:如果是windows,地址为绝对路径,如D:/solr/solrhome,不必用windows下的反斜线)
solr/home
/usr/local/solr/solrhome
java.lang.String
命令如下:
# cp -r /usr/local/solr/solr5/server//lib/ext/* /usr/local/solr/tomcat7/webapps/solr/WEB-INF/lib/
命令如下:
# cp -r /usr/local/solr/solr5/server/resources/log4j.properties /usr/local/solr/tomcat7/webapps/solr/WEB-INF/classes/
注:这里如果访问地址为http://192.168.199.23:8080/solr会报404的错误,需要在地址后面加上admin.html,这是solr5特有的,千万注意。
SolrHome是Solr运行的主目录,该目录中包括了多个SolrCore目录。SolrCore目录中包含了运行Solr实例所有的配置文件和数据文件,Solr实例就是SolrCore。
一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务。
SolrHome目录:
SolrCore目录:
创建SolrCore先要创建SolrHome。在solr解压包下solr5/server/solr文件夹就是一个标准的SolrHome。
注:改名不是必须的,只是为了便于理解。
配置多SolrCore的好处:
复制原来的core目录为collection2,目录结构如下:
修改collection2下的core.properties,如下:
演示多core的使用,在collection1和collection2中分别创建索引、搜索索引,可以自己尝试。
Solr自带的分词器并不能很好的满足我们的实际业务需求,比如对中文的分词支持的不够完善,如下:
可以看到当输入一个经典的例子语句”乒乓球拍卖完了”的时候分词效果是将每个文字都拆分开了,这样在最后用户检索的时候会服务器会响应大量的垃圾信息,用户体验大大下降。所以我配置自己的分词器。具体步骤如下:
所需jar包以及配置文件下载地址
然后重启tomcat,在analysis中选择text_ik,输入一段中文,查看分词效果。
可以看到分词效果明细提升,如果有其他业务需要也可以继续对IK的词库进行相应的扩充。