(一)Solr入门

378 阅读6分钟

要点

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.排名检索

    能够通过关键词计算文档的匹配程度,按照匹配程度的大小返回文档,并且能够对文档的关键字段赋予高分

    1. 超越关键词搜索

    通过用户输入的关键词,除了能够返回匹配的文档外,还可以返回对文档统计之后的结果,对文档的关键字段进行分面,对用户的搜索进行导航

  • 4搜索引擎不适合的场景

    • 不适合大数据量的返回,可以通过分页返回个更多的数据,引擎在返回数据时会对磁盘上的文档进行重构,大量的文档返回会降低搜索的速度

    • 不要使用引擎完成深度分析的任务,不要在查询中有处理逻辑

    • 搜索引擎无法完成字段间的引用

    • 搜索引擎不支持文档级别的安全策略

1.2 搜索引擎原理

搜索引擎通过倒排索引构建文档的倒排表,通过倒排表完成数据的搜索 image.png

引擎会对文档的的每个字段进行分割,分割成一个个词项,该字段的每个词项都会建立对应的倒排索引表,倒排索引表中指出了包含该词项的文档编号,当用户输入关键词进行搜索时,匹配字段中相同的词项,通过该词项找到包含该关键词的文档信息.

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   //启动服务

访问http://127.0.0.1:8983/solr

如果启动不成功,可以更改solr的启动端口:

java -Djetty.port=8080 -jar start.jar        //指定8080端口启动solr

image.png

3.1解压后的Solr目录

image.png

本章主要启动的时example目录下的实例,example的目录结构如下:

image.png

每一个collection就是一个内核,一个solr服务器可以包含多个内核,内核与mysql中的database相似,每个内核的目录结构如下:

image.png

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控制台

image.png

选择内核collection1后进行查询,查询框的作用

image.png

3.4查询参数列表

表单字段取值说明
qapple name:huawei主查询参数,根据该参数中的词项与文档的相似度,对文档进行评分
fqprice:133过滤字段:通过过滤器筛选过滤结果,但不影响评分
sortprice desc指定排序的字段与排序的方式
start0指定搜索页的起使页
row10页面大小,限制返回条数
flname,price在结果集中显示的字段
dfname未指定搜索字段的任意查询词项的默认搜索字段
wtjson响应输出类型,控制响应输出的格式

请求URL的分析:

image.png

3.5排名检索

Solr查询的结果会按照匹配度对文档进行降序排序返回,在查询时可以对某一个字段的词项进行加分:

在查询时,q=ipad power^2,会将给power赋予boost值2,而iPod的boost值为1,重而影响排序的效果.

3.6其他功能

dismax 析取最大查询解析器

edismax 扩展的析取最大解析器

hl 搜索结果高亮

facet 分面

spatial 地理空间搜索

spellcheck 查询词项拼写检查