一、Solr简介
二、solr安装
三、solr基础
四、IK Analyzer(中文分词器)
一、Solr简介
Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr索引的实现方法很简单,用POST方法向 Solr服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET请求,然后对Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
在以前可能手机或者PC端访问商品的时候,我们服务器的时候我们是直接读取数据库。
而现在用solr我们不直接读取数据库,而是走solr服务器,但是solr服务器的数据(在服务器上存储的是document)是由数据库中加载的。但是不是实时的,我们通过跑定时任务增量或者全量将DB的数据加载到Solr中。
二、solr安装
solr 各种版本集合下载
http://archive.apache.org/dist/lucene/solr/
安装Solr与Tomcat集成:Linux环境CentOS6.5、Tomcat7.0、Solr5.3.2
安装步骤
1、解压tar -zxvf Solr5.3.2.
2 cd /usr/local/solr/solr-5.3.2/server/solr-webapp/webapp
3、拷贝 /usr/local/solr/solr-5.3.2/server/solr-webapp/webapp文件到tomcat的webapps中
cp -r /usr/local/solr/solr-5.3.2/server/solr-webapp/webapp/. /usr/local/tomcat/apache-tomcat-7.0.29/webapps/solr/
4、修改其文件: vim solr/WEB-INF/web.xml 找到nv-entry 内容,修改solr/home地址/usr/local/solr/solr-5.3.2/example/example-DIH/solr。保存并退出即可
5、拷贝相关拓展jar包到tomcat下
cd /usr/local/solr/solr-5.3.2/server/lib/ext && cp * /usr/local/tomcat/apache-tomcat-7.0.29/lib
6、启动tomcat即可 /usr/local/tomcat/apache-tomcat-7.0.29/bin/startup.sh
7、查看日志tail -500f /usr/local/tomcat/apache-tomcat-7.0.29/logs/catalina.out
8、打开浏览器访问
http://IP:8080/solr查看主页。说明solr服务器已经启动
在solr服务器上存储的是document,比如我们进入vim solr-5.3.2/example/example-DIH/solr/solr/conf/schema.xml
可以看到
在图中,我们看到了好多field,比如name等。solr默认提供了索引的字段。这些索引字段不需要我们自己建。在搜索的时候,我们可以指定字段name,我们可以通过java程序,将name的值放到solr服务器上面,我们搜索的时候,直接走solr服务器
这里做一个小的实验,由于之前我们在tomcat的web.xml中配置了nv-entry的key,我在这里,随便选择一个改了下id和title进行测试
这里多添加几个
可以点击查询看到我们之前插入的文档
控制台还可以通过参数去过滤相关数据。具体可以自研究一下。
三、solr基础
1、信息源->本地(进行加工和处理)->建立索引库(信息集合,一组文件的集合)
2、搜索的时候从本地的(索引库)信息集合中搜索
3、文本在建立索引和搜索时,都会先进行分词(使用分词器)
4、索引的结构:
索引表(存放具体的词汇,哪些词汇再那些文档里存储,索引里存储的就是分词器分词之后的结果)
存放数据(文档信息集合)
5、用户搜索时:首先经过分词器进行分词,然后去索引表里查找对应的词汇(利用倒排序索引),再找到对应的文档集合
6、索引库位置(目录)
7、信息集合里的每一条数据都是一个文件(存储所有信息,他是一个Filed属性的集合)
8、store是否进行存储(可以不存储,也可以存储)
9、index是否进行存储(可以不索引,也可以索引,索引的话分为分词后索引,或者直接索引)
概括起来可以使用下面的图来表示
四、IK Analyzer(中文分词器)
在管控台上,我使用一段文字进行了分词发现
这样,他就把每个字进行分词,这样效率就太低了。我们要求的是,最要能将句子分解成,码农、明天、要、上班、了。类似这样的索引。(PS:索引文件存放在/usr/local/solr/solr-5.3.2/example/example-DIH/solr/solr/data/index)
无论是Solr的还是Lucene的,都对中文分词不支持,所以我们一般索引中文的话需要使用IK中文分词器。
分词器下载地址https://github.com/EugenePig/ik-analyzer-solr5
下载完毕之后编译
JDK8
mvn clean install
JDK7
mvn clean -Djavac.src.version=1.7 -Djavac.target.version=1.7 install
得到ik-analyzer-solr5-5.x.jar
安装:把ik-analyzer-solr5-5.x.jar拷贝到Tomcat的Solr中的应用服务下:
我这里是/usr/local/tomcat/apache-tomcat-7.0.29/webapps/solr/WEB-INF/lib
创建文件夹:/usr/local/tomcat/apache-tomcat-7.0.29/webapps/solr/WEB-INF/classes
把IKAnalyzer.cfg.xml和stopword.dic,ext。dic拷贝到新创建的类目录下即可。
修改solr core的schema文件,默认是位置:
vim /usr/local/solr/solr-5.3.2/example/example-DIH/solr/solr/conf/schema.xml
添加如下配置:
<fieldType name ="text_ik" class ="solr.TextField">
<!-- 索引时候的分词器-->
<analyzer type ="index" isMaxWordLength ="false" class ="org.wltea.analyzer.lucene.IKAnalyzer"/>
<!--查询时候的分词器-->
<analyzer type ="query" isMaxWordLength ="true" class ="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
最后启动tamcat
/usr/local/tomcat/apache-tomcat-7.0.29/bin/startup.sh
可以通过 tail -f /usr/local/tomcat/apache-tomcat-7.0.29/logs/catalina.out 查看日志
如果我想自定义一些词库,让IK分词器可以识别,那么就需要自定义扩展词库了。
操作步骤:
1、修改/usr/local/tomcat/apache-tomcat-7.0.29/webapps/solr/WEB-INF/classes的IKAnalyzer.cfg.xml
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
我们在ext.dic配置我们自己的扩展字典,
重新进行分词
————————————————
版权声明:本文为CSDN博主「Mr_蜗牛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010634288/article/details/81634689