要点
1.概述
为了解决web应用的可扩展性与可用性的需求,统称为NoSQL的非关系型数据库得到了快速的发展,每一种非关系型数据库是了处理特定类型的数据,而非所有的数据必须遵守一定的标准化格式,而Solr也是为了解决特定的数据查询场景---Solr是为了实现大规模的文本检索的一种特殊数据库,通过Solr能够构建以文本为中心的快速检索模型 ,主要特点如下:
- 以文本为中心,Solr针对自然语言文本搜索进行优化,不应该处理如图片,视频等二进制文件
- 根据相关度对文本进行排序,并以此顺序返回文档结果.
1.1 为什么需要搜索引擎
Solr引擎通过特殊的数据结构,能够加快文本数据的检索速度
1.1.1管理以文本为中心的数据
Solr引擎擅长处理的数据特征主要有以下四个特点:
-
1.以文本为中心
搜索引擎专门将文本的隐藏结构抽取到索引中,从而改善搜索的速度与结果
-
2 读主导
索引引擎能够实现有效的读取,且无需对数据进行经常的更新,Solr的并不擅长实时的更新个插入数据
-
3.面向文档
Solr索引引擎处理的是文档,文档就是一些字段的集合,Solr处理的文档字段中可以包含文本数据,每个字段仅包含数据而不包含引用,及Solr的字段并不引用其他字段,并且Solr对字段并不要求一致的格式,每个文档中可以包含不同的字段.
-
4.灵活的模式
Solr的文档并不需要统一的格式,并不需要和关系型数据库一样,每条数据都拥有相同的结构.
1.1.2 搜索引擎的主要用例
搜索引擎的主要使用在文档的检索方面,主要的应用场景如下:
-
1.提供基础的关键词搜索
通过用户输入的关键词,能够返回符合用户需求的文档信息,所以搜索引擎必须拥有如下的功能:
- 识别词语的同义词
- 匹配包含查询此词项的语言形式变换的文档
- 匹配关键的短语或者整个文字部分
- 处理如an,the等常用的文字
- 能够提供分页,分批次返回给用户
-
2.排名检索
能够通过关键词计算文档的匹配程度,按照匹配程度的大小返回文档,并且能够对文档的关键字段赋予高分
-
- 超越关键词搜索
通过用户输入的关键词,除了能够返回匹配的文档外,还可以返回对文档统计之后的结果,对文档的关键字段进行分面,对用户的搜索进行导航
-
4搜索引擎不适合的场景
-
不适合大数据量的返回,可以通过分页返回个更多的数据,引擎在返回数据时会对磁盘上的文档进行重构,大量的文档返回会降低搜索的速度
-
不要使用引擎完成深度分析的任务,不要在查询中有处理逻辑
-
搜索引擎无法完成字段间的引用
-
搜索引擎不支持文档级别的安全策略
-
1.2 搜索引擎原理
搜索引擎通过倒排索引构建文档的倒排表,通过倒排表完成数据的搜索
引擎会对文档的的每个字段进行分割,分割成一个个词项,该字段的每个词项都会建立对应的倒排索引表,倒排索引表中指出了包含该词项的文档编号,当用户输入关键词进行搜索时,匹配字段中相同的词项,通过该词项找到包含该关键词的文档信息.
2.Solr4.10.3安装
2.1.下载并解压:
wget http://archive.apache.org/dist/lucene/solr/4.10.3/solr-4.10.3.tgz
tar zxf solr-4.10.3.tgz
如果不希望solr运行在tomcat服务器之上,下载文件并解压后,直接按照下面第3节利用自带jetty服务器启动即可
2.2.整合tomcat:
将tomcat拷贝至solr的目录中
mkdir /usr/local/solr
cp apache-tomcat-7.0.59 /usr/local/solr/tomcat -r
2.3.修改配置
1.将solr-4.10.3/dist/目录下的solr-4.10.3.war放到tomcat的webapps目录下并命名为solr.war,运行tomcat解压war生成solr文件夹后删除war包
2.将solr-4.10.3/example/lib/ext/目录下的所有jar包拷贝到/usr/local/solr/tomcat/webapps/solr/WEB-INF/lib目录中
3.将solr-4.10.3/example/目录下的solr文件夹复制到/usr/local/solr/目录下并且重命名为solrhome,如此一来,/usr/local/solr/目录下面就会有solrhome和tomcat这两个目录了
4.修改/usr/local/solr/tomcat/webapps/solr/WEB-INF/目录下的web.xml文件,我们要把web.xml文件当中用红框标注的这段配置的注释去掉,并修改env-entry-value的值为我们solrhome的目录
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solr/solrhome</env-entry-value>//取消整段的注释并修改此处配置
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
5.在solrhome中创建/solrindex作为索引文件存放的目录
6.进入/usr/local/solr/solrhome/collection1/conf,打开solrconfig.xml修改为如下
<!-- <lib dir="${solr.install.dir:../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../..}/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="${solr.install.dir:../../..}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../..}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../..}/dist/" regex="solr-velocity-\d.*\.jar" /> -->//注释此段代码
......
<dataDir>${solr.data.dir:/usr/local/solr/solrhome/solrindex}</dataDir>//修改此处路径配置
2.4.检测:
运行tomcat,输入http://127.0.0.1:8080/solr/访问:
3.Solr上手
以上将solr使用tomcat启动,也可以直接使用solr自带的jetty服务器启动solr
cd /solr-4.10.3/example //进入到solr解压后目录的example中
java -jar start.jar //启动服务
如果启动不成功,可以更改solr的启动端口:
java -Djetty.port=8080 -jar start.jar //指定8080端口启动solr
3.1解压后的Solr目录
本章主要启动的时example目录下的实例,example的目录结构如下:
每一个collection就是一个内核,一个solr服务器可以包含多个内核,内核与mysql中的database相似,每个内核的目录结构如下:
3.2示例文档的导入
在解压后的example/exampledocs目录下包含实例所需的文档,通过post.jar可以将 这些文件以Http Post的方式,加入到solr的文档中,提供给solr进行搜索
cd exampledocs/
yang@tianx:/usr/local/solr/solr/solr-4.10.3/example/exampledocs $ls
books.csv ipod_video.xml monitor.xml solr-word.pdf
books.json manufacturers.xml mp500.xml solr.xml
gb18030-example.xml mem.xml post.jar test_utf8.sh
hd.xml money.xml post.sh utf8-example.xml
ipod_other.xml monitor2.xml sd500.xml vidcard.xml
java -jar post.jar *.xml
SimplePostTool version 1.5
Posting files to base url http://localhost:8983/solr/update using content-type application/xml..
POSTing file gb18030-example.xml
POSTing file hd.xml
POSTing file ipod_other.xml
POSTing file ipod_video.xml
POSTing file manufacturers.xml
POSTing file mem.xml
POSTing file money.xml
POSTing file monitor2.xml
POSTing file monitor.xml
POSTing file mp500.xml
POSTing file sd500.xml
POSTing file solr.xml
POSTing file utf8-example.xml
POSTing file vidcard.xml
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/update..
Time spent: 0:00:00.579
3.3查看文档以及solr控制台的作用
solr控制台可以将solr查询语句以http get请求方式发送给solr服务器,并返回符合要求的结果
solr控制台
选择内核collection1后进行查询,查询框的作用
3.4查询参数列表
表单字段 | 取值 | 说明 |
---|---|---|
q | apple name:huawei | 主查询参数,根据该参数中的词项与文档的相似度,对文档进行评分 |
fq | price:133 | 过滤字段:通过过滤器筛选过滤结果,但不影响评分 |
sort | price desc | 指定排序的字段与排序的方式 |
start | 0 | 指定搜索页的起使页 |
row | 10 | 页面大小,限制返回条数 |
fl | name,price | 在结果集中显示的字段 |
df | name | 未指定搜索字段的任意查询词项的默认搜索字段 |
wt | json | 响应输出类型,控制响应输出的格式 |
请求URL的分析:
3.5排名检索
Solr查询的结果会按照匹配度对文档进行降序排序返回,在查询时可以对某一个字段的词项进行加分:
在查询时,q=ipad power^2,会将给power赋予boost值2,而iPod的boost值为1,重而影响排序的效果.
3.6其他功能
dismax 析取最大查询解析器
edismax 扩展的析取最大解析器
hl 搜索结果高亮
facet 分面
spatial 地理空间搜索
spellcheck 查询词项拼写检查