Solr Quick Start: Apache Solr官网翻译
概要
文档主要包含Solr启动、运行Solr导入各种形式的数据源到多个集合中,近距离体验Solr管理员和搜索接口
要求
- 系统要求
- Apache Solr 发布包
开始
运行浏览器显示指南,同一台机器上的Solr服务器指南帮助正确入门Solr Server 开始解压Solr发布包,将Solr的解压目录放在工作目录下,注意基础目录名可能与下载的Solr的版本号不同,例如Unix、Cygwin或者MacOS的shell版本不同
Linux指令
:$ ls solr*
solr-5.0.0.zip
:$ unzip -q solr-5.0.0.zip
:$ cd solr-5.0.0/
Solr Cloud 结构层次图
Solr Cloud: Solr 基于Zookeeper构建的分布式搜索系统,zookeeper保证高可用
Collection: 对应standby模式下的Solr Core
Shard(分片): 对应Collection逻辑划分的Core,可理解为多个Shard组成一个完整意义上的Solr Core,若是单机模式下:1 Solr Core = 1 Shard = 1 Core = 1 replica,Shard对于用户是透明的,主要通过上一层的Collection提供一个Façade接口
Core: Solr Core 1个包含索引和配置文件的运行实例,一个Core对应一个Replica实际提供索引服务,SolrCloud提供冗余机制,多个Replica提供的索引数据服务是相同的
Replica: Shard真实物理存储,可提供类似HDFS的备份机制保证冗余特性
Solr的命令表
Linux:
- 普通solr命令:solr start -s /usr/local/hadoop/solr-5.3.1/server/solr
- 启动Solr Cloud指令:
- bin/solr start -e cloud –noprompt
命令分析:Solr Cloud 测试样例,会在 example下创建cloud目录,并且创建两个物理节点Node01、Node02, gettingstarted是逻辑意义上的Solr Core, Solr Core通过分片包含2个备份
Windows启动Solr命令:solr start(默认参数启动)
Windows关闭Solr命令:solr stop –all
Solr Admin UI查看Solr运行状态:http://localhost:8983/solr/
SolrCloud 运行在2个节点,端口7574和端口8983,命令执行后默认自动创建的Solr Core: gettingstarted,gettingstarted由两个shard组成,每个shard存在2个replica,Solr的管理员界面Cloud Tab 很好的展示Collection
解释:
- SolrHome:Solr所有的索引数据集合
- Gettingstarted:Solr Core名称
索引数据
Solr服务器启动、运行后不包含数据,Solr安装目录包含bin/post 工具,主要是帮助将各种类型的文档在Solr启动的时候导入Solr,这里将Post工具用于索引下面的案例。需要在Solr的安装目录下使用命令shell运行案例。
注意:bin/post工具和windows 脚本完全不一样,但是内部调用的Java程序是可获得的,详情请看:https://cwiki.apache.org/confluence/display/solr/Post+Tool#PostTool-Windows
索引rich 文件目录
Rich是指HMTL/PDF/MSOffice/简单文本,bin/post工具支持文件目录处理(包含子目录),并且将少量的内容导入Solr,便于查询和索引,Solr安装目录包含doc的子目录,可以很方便的通过下面命令将文件导入到Solr索引库:
bin/post -c gettingstarted docs/
命令参数详解:
- -c gettingstarted:索引导入Solr Core的名称
- docs/:solr安装目录下doc目录相对路径
现在可索引存储在gettingstarted的成千上万的文件并且提交索引更新,用户可以通过Solr Admin UI的Query选项卡搜索“solr”关键字,在‘q’一行使用自定义的内容取代’*’,然后点击”Execute Query”查询相关信息
建立数据索引,重新运行导入索引命令:bin/post -c gettingstarted docs/后,重新导入同一个Collection索引数据会清空原先的数据之后才会存入索引数据。
索引Solr xml
Solr支持索引各种格式的结构化内容,结构化内容数据可以通过Solr XML格式导入Solr,通过Solr XML,solr索引工作者通常可以编码通过POST请求的形式直接去访问Solr的/update的方法将一定范围的内容写入Solr。
Solr的安装目录包example目录包含许多Solr XML格式文件,这些techproducts需特定的配置, bin/solr脚本包含支持配置,可通过bin/solr start –e 参数值,这种方式在启动solr的同时创建Collection
bin/post: 索引在example/exanplesdocs目录下的Solr XML文件:
测试命令:bin/post –c gettingstarted example/exampledocs/*.xml
将索引数据导入gettingstarted,现在可通过默认Solr Query语法进行搜索,注意你可以通过http://localhost:8983/solr/gettingstarted/browse
浏览页面显示的索引的文档尽管是粗糙、原型化、交互式的HTML视图,但是/browse UI展示Solr技术能力(/browse视图默认gettingstarted schema和数据格式默认结构化XML、JSON、CSV样例数据和非结构化rich数据,数据可能是首先不会非理想化显示,但是可以通过模板定制)
索引库数据视图
索引JSON:
Solr支持索引JSON数据:任意的结构化JSON或者类似Solr XML的“Solr JSON”,Solr example目录包含Solr Json测试文件,使用bin/post,建立JSON 文件索引:
bin/post -c gettingstarted example/exampledocs/books.json
windows命令:java -Durl=http://localhost:8080/solr/collection/update -jar post.jar *.json
为了扁平化(索引数据切割:类似Spark的RDD分割Partition)和索引任意的结构化JSON,可以查看ansforming and Indexing Custom JSON data.
索引CSV文件:
CSV文件是将数据导入Solr一个比较好的方式,特别是当文档是有相同一组的属性时,CSV可以很方便的从Excel或者从数据库(例如mysql)中导出。当SOlr启动时,可以很容易将结构化数据导出为CSV格式,然后将数据存入Solr,而不是需要额外的导入步骤
测试命令:bin/post -c gettingstarted example/exampledocs/books.csv
其他的索引管理技术:
- 通过Data Import Handler (DIH).从数据库将数据导入Solr
- 通过Solr的Java客户端SolrJ管理索引
- 通过Admin UI导入:Documents选项卡
更新数据:
注意到即使索引这个指南中的内容超过1次,solr也不会出现重复的结果,因为schema.xml文件指定了名为“id”,“uniqueKey”域,无论什么时候使用POST命令以相同的uniqueKey提交文档,solr会自动提替换(类似Map属性,key相同的值总是会被最新的值替代),我们可以通过Solr Admin UI的Overview视图的num Docs和Max Doc属性验证这个过程:
Num Docs:表示可检索的文档数量(可能大于XML\JSON\CSV文件的总和,因为一些rich 文件可能包含多个文件:例如Work文档里面内嵌文档)
Max Docs:可能比Num Docs更大,因为Max Docs包含逻辑上已删除但是物理还未从索引删除的文档
注意:可能每次我们使用post命令重复提交索引,但是Num Docs并未增长,可能是uniquekey相同时新索引取代旧索引,造成索引内容可能改变但数量不变,可以通过提交同一个样本文件,但是每次提交前修改内容,通过相同的id查询会得到不同的结果
删除数据:
可通过更新URL通过提交delete命令,并且指定文档的uniquekey域或设置查询条件去删除索引数据 测试命令:
bin/post -c gettingstarted -d "<delete><id>SP2514N</id></delete>"
验证:通过Solr Admin UI的Query Tab q栏输入:id:”key”去验证索引数据是否真正删除
搜索:
Solr查询可通过REST客户端、CURL、wget、Chrome POSTMAN等方式,可以为许多编程语言提供类似本地客户端的体验,Solr Admin UI包含一个solr查询接口:可以看Sorl Admin UI的query Tab,如果不设置筛选条件点击“Execute Query“按钮,将会获取默认的10条JSON格式的索引记录
Solr查询表达式:”域名”:”域值”:*:*表示匹配所有的数据
Solr默认查询10条数据由“start,rows“栏的rows指定,提供分页效果
Solr Admin UI访问的URL在结果窗口的顶端呈现灰色的效果,点击之后将会显示Solr的响应数据,也可以使用curl命令行:
curl "http://localhost:8983/solr/gettingstarted/select?q=\*%3A*&wt=json&indent=true"
URL参数解释:
- q:query:查询条件:URL-encod编码
- wt:solr相应内容的输出格式
- indent:内容是否切割:主要让solr响应内容格式化显示,否则非格式化显示,全部堆在一起不美观
查询基础:
- 单一条件限定查询 单一条件查询主要设置“q“参数,用实际的域值替换“:”,例如搜索“foundation”,使用curl指令:
curl http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation
Solr页面显示:
- 短语搜索:通俗点就是关键字组合查询 测试案例:
curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=\"CAS+latency\""
Sor结果页面:
- 联合查询
默认使用多关键字或短语查询时,solr仅仅要求匹配的文档中存在,结果列表中包含关键字越多的信息按顺序显示,用户可以要求一个关键字以“+“或”-“作为前缀。查询的关键字包含“one”和“three”,可以通过“+”进行连接,但是URL中会使用URL Encoder进行转码传输 案例:
curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=%2Bone+%2Bthree"
更多的Solr的query可参考:https://cwiki.apache.org/confluence/display/solr/Searching
Solr Faceting:垂直搜索
Solr最受欢迎的功能是Faceting,Faceting运行搜索结果归档为子集/Buckets/Categories,并且提供每个子集的数量,Faceting的种类:filed values, numeric and date ranges, pivots (decision tree), and arbitrary query faceting.
Faceting: 对已经搜索出来的结果进一步的切分,例如汽车搜索,solr应该显示全部的包含汽车字样,但是可以通过faceting将汽车划分为卡车、轿车等类型,用户可以直接点击对应的汽车类型得到对应的结果,也可以查看卡车对应的数量统计等,Facating实际上相当于一个内容过滤的角色
Field facets
Solr可以提供搜索结果,Solr facets可以通过查询返回搜索文档的数量,每个文档在结果集包含唯一的关键字,在Solr Admin UI选项卡,可以选中“facet”复选框,可以看到和faceted相关的可选参数
分析:类似搜索“电脑”,solr返回电脑分类:例如联想商品数量:100,惠普电脑250情况,还可以通过时间等维度进行搜索
Range Facets:
对于数字和日期经常描述facet数据在某个范围,而不是分离实际值,通俗说就是在某个区间范围内搜索结果,例如淘宝的商品价格、日期等方位搜索
测试案例:
curl http://localhost:8983/solr/gettingstarted/select?q=*:*&wt=json&indent=on&rows=0&facet=true&facet.range=price&f.price.facet.range.start=0&f.price.facet.range.end=600&f.price.facet.range.gap=50&facet.range.other=after
Pivot Facets:
Priot Facets类似决策树,允许两个或以上的fields组合查询,测试案例
curl http://localhost:8983/solr/gettingstarted/select?q=*:*&rows=0&wt=json&indent=on&facet=on&facet.pivot=cat,inStock
结果说明:book类的关于Cat的书,仍在卖的有12本,没有在卖的有2本
Spatial
Solr支持位置限制支持,在指定的位置的距离范围内搜素,结果并按照距离排序,甚至可以通过距离改善结果,类似现在的LBS服务。测试数据目录:
example/exampledocs/*.xml,文件包含有表面Spatial能力表述的定位信息,运行测试,测试方法查看:techproducts example section,Spatial查询可以和其他类型的查询缓和使用,例如查询距离旧金山“ipod”的关键字: http://localhost:8983/solr/techproducts/browse?q=ipod&pt=37.7752%2C-122.4232&d=10&sfield=store&fq=%7B%21bbox%7D&queryOpts=spatial&queryOpts=spatial
Spatial:对匹配的结果进一步的筛选,结果更精确
总结:
通过Solr入门指南应了解:
- 在SolrClund模式下启动Solr
- 索引富文本文件/XML文件/JSON文件/CSV文件
- 打开Solr Admin控制台,使用查询接口获取JSON个数的输出结果
- 打开/browse接口以更加友好的方式和熟悉的接口展示Solr显示Solr的功能
下面是开始Solr入门指南的关键指令:linux/unix脚本
bin/solr start -e cloud -noprompt ;
open http://localhost:8983/solr ;
bin/post -c gettingstarted docs/ ;
open http://localhost:8983/solr/gettingstarted/browse ;
bin/post -c gettingstarted example/exampledocs/*.xml ;
bin/post -c gettingstarted example/exampledocs/books.json ;
bin/post -c gettingstarted example/exampledocs/books.csv ;
bin/post -c gettingstarted -d "<delete><id>SP2514N</id></delete>" ;
bin/solr healthcheck -c gettingstarted ;
注意:gettingstarted是solr core的名称需要手动创建然后导入
清理: 停止Solr和恢复Solr为初始状态,可使用下面的指令
bin/solr stop -all ; //关闭solar
rm -Rf example/cloud/ /删除Solr的数据文件
来源:oschina
链接:https://my.oschina.net/u/4074151/blog/3015265