Solr Quick Start: Apache Solr官网翻译java
文档主要包含Solr启动、运行Solr导入各类形式的数据源到多个集合中,近距离体验Solr管理员和搜索接口mysql
运行浏览器显示指南,同一台机器上的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 基于Zookeeper构建的分布式搜索系统,zookeeper保证高可用sql
Collection: 对应standby模式下的Solr Coreshell
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提供的索引数据服务是相同的apache
Replica: Shard真实物理存储,可提供相似HDFS的备份机制保证冗余特性编程
命令分析:Solr Cloud 测试样例,会在 example下建立cloud目录,而且建立两个物理节点Node0一、Node02, gettingstarted是逻辑意义上的Solr Core, Solr Core经过分片包含2个备份json
Windows启动Solr命令:solr start(默认参数启动)windows
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
解释:
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是指HMTL/PDF/MSOffice/简单文本,bin/post工具支持文件目录处理(包含子目录),而且将少许的内容导入Solr,便于查询和索引,Solr安装目录包含doc的子目录,能够很方便的经过下面命令将文件导入到Solr索引库:
bin/post -c gettingstarted docs/
命令参数详解:
如今可索引存储在gettingstarted的成千上万的文件而且提交索引更新,用户能够经过Solr Admin UI的Query选项卡搜索“solr”关键字,在‘q’一行使用自定义的内容取代’*’,而后点击”Execute Query”查询相关信息
创建数据索引,从新运行导入索引命令:bin/post -c gettingstarted docs/后,从新导入同一个Collection索引数据会清空原先的数据以后才会存入索引数据。
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数据,数据多是首先不会非理想化显示,可是能够经过模板定制)
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文件是将数据导入Solr一个比较好的方式,特别是当文档是有相同一组的属性时,CSV能够很方便的从Excel或者从数据库(例如mysql)中导出。当SOlr启动时,能够很容易将结构化数据导出为CSV格式,而后将数据存入Solr,而不是须要额外的导入步骤
测试命令:bin/post -c gettingstarted example/exampledocs/books.csv
其余的索引管理技术:
注意到即便索引这个指南中的内容超过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参数解释:
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,Faceting运行搜索结果归档为子集/Buckets/Categories,而且提供每一个子集的数量,Faceting的种类:filed values, numeric and date ranges, pivots (decision tree), and arbitrary query faceting.
Faceting: 对已经搜索出来的结果进一步的切分,例如汽车搜索,solr应该显示所有的包含汽车字样,可是能够经过faceting将汽车划分为卡车、轿车等类型,用户能够直接点击对应的汽车类型获得对应的结果,也能够查看卡车对应的数量统计等,Facating实际上至关于一个内容过滤的角色
Solr能够提供搜索结果,Solr facets能够经过查询返回搜索文档的数量,每一个文档在结果集包含惟一的关键字,在Solr Admin UI选项卡,能够选中“facet”复选框,能够看到和faceted相关的可选参数
分析:相似搜索“电脑”,solr返回电脑分类:例如联想商品数量:100,惠普电脑250状况,还能够经过时间等维度进行搜索
对于数字和日期常常描述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
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本
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入门指南应了解:
下面是开始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的数据文件