solr
1.solr概述
1.1 lucene和solr
Lucene是apache软件基金会下的一个子项目。是一个成熟、免费、开放源代码的全文检索引擎工具包。提供了一套简单易用的API,方便在目标系统中实现全文检索功能。目前已经有很多应用系统的搜索功能是基于lucene来实现。比如eclipse、idea帮助系统的搜索功能。
Lucene能够为文本类型的数据建立索引,只需要把数据转换成文本格式,lucene就可以对文档进行索引和搜索。比如常见的word文档、html文档、pdf文档。首先将文档内容转换成文本格式,交给lucene进行索引,把建立好的索引保存在硬盘或者内存中。然后根据用户输入的查询条件,在索引文件中查找,返回查询结果给用户。
Solr 是一个基于 Apache Lucene 之上的搜索服务器,它是一个开源的、基于 Java 的信息检索库。它旨在驱动功能强大的文档检索应用程序 - 无论您需要根据用户的查询将数据服务到何处,Solr 都可以为您服务。
1.2 全文检索
索引流程:计算机通过索引程序扫描文件中的每一个词语,建立词语与文件的对应关系
检索流程:计算机通过检索程序,根据搜索关键词,在索引库查找目标内容
1.3 对比Elasticsearch
- Solr利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。
- Solr支持更多格式的数据,而Elasticsearch仅支持json文件格式。
- Solr官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能都有第三方插件提供。
- Solr在传统的搜索应用中表现好于Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch当单纯的对已有数据进行搜索时,Solr更快,当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。综上所述,Solr****的架构不适合实时搜索的应用。Solr是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
2.solr安装
下载地址:https://lucene.apache.org/solr/mirrors-solr-latest-redir.html
window的安装在这里就不说,其实和Linux基本上差不多。
Linux的安装
#解压
tar -zxvf solr-7.7.2.tgz.tar
#在solr5以下还需要将solr的war包放到Tomcat里面运行,5以后就可以直接启动solr
cd solr-7.7.2/bin
#启动solr 默认端口是8983
./solr start
#查看端口号
./solr start -force
#检查solr运行状态
./solr status
#创建核心
./solr create -c collection1
#server/solr/configsets/_default/目录下的conf 拷贝到 new_core 目录下
#检查solrconfig.xml文件配置的路径是否正确,重启服务
#以后在添加的时候就不需要这么麻烦,复制new_core然后修改配置文件的name即可
如果直接启动solr报错:
#修改solr.in.sh文件
将
#SOLR_ULIMIT_CHECKS=
修改成
SOLR_ULIMIT_CHECKS=false
这种方式虽然简单,但是solr为我们做的太多,目录过于臃肿,也不便于我们移植扩展,尤其是当我们需要多个solr实例的时候。下面来介绍用Tomcat部署:
#修改solrhome
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/home/hadoop2/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
##2.安装ik分词器
<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>