Apache Solr 介绍
Solr 是什么?
Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现。服务器通信使用标准的HTTP 和XML,所以如果使用Solr 了解Java 技术会有用却不是必须的要求。
Solr 主要特性有:强大的全文检索功能,高亮显示检索结果,动态集群,数据库接口和电子文档(Word ,PDF 等)的处理。而且Solr 具有高度的可扩展,支持分布搜索和索引的复制。
Lucene 是什么?
Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。
目前已经有很多应用程序的搜索功能是基于 Lucene ,比如 Eclipse 帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。
安装Apache Solr
下载最新的Solr
官网地址:http://lucene.apache.org/solr/
点击右上角Download会自动跳转到下载页面。
当前版本为6.4.1
解压目录
如:D:\solr-6.4.1
打开cmd命令行窗口,进入解压目录
执行命令:
solr start
用浏览器访问
启动成功!
自定义索引目录
Solr的默认数据路径在D:\solr-6.4.1\server\目录下
在启动参数中加入-s 目录路径可以指定索引存放目录
新建目录D:\solr-example
复制D:\solr-6.4.1\server\solr\solr.xml到D:\solr-example
执行命令启动solr
solr start –s “D:\solr-example”
执行命令创建核心:
solr create –c
test
索引配置
Solr的索引有3种配置类型
Field
同等于数据库的字段
- name 就是字段名称
- type 数据类型
- indexed 是否对该字段建立索引
- stored 是否保存,设置为true则会在搜索结果里显示该字段的内容,否则不显示
- multiValued 属性设置为true,它作用就是可以在同一个字段上添加多条内容
Dynamic fields
这种类型的字段并没有把字段名称写死,而是通过前缀或者后缀通配符来匹配字段名称,只要是符合这个通配符的字段名称都适用于它所定义的属性。
它的属性设置和第一第二两种类型的配置方式一样,你同样可以设置它为第二种类型,即multiValued=”true”。
适用它有三个好处:
■ Modeling documents with many fields
■ Supporting documents from diverse sources
■ Adding new document sources
也就是说不再局限于写死的fields了,这里可以灵活在提交的文档里添加新的字段
Copy fields
首先在fields里定义一个字段,它可以把多个字段合并到这个字段,它必须设置multiValued=”true”。
然后设置它的拷贝关系,它的位置和fields>是平级的,是兄弟关系。
查询测试
在Core Selector选择test->Query
常用查询参数说明
q - 查询字符串,必须的。
fl - 指定返回那些字段内容,用逗号或空格分隔多个。
start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
rows - 指定返回结果最多有多少条记录,配合start来实现分页。
sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(inStock desc, price asc)表示先 “inStock” 降序, 再 “price” 升序,默认是相关性降序。
wt - (writer type)指定输出格式,可以有 xml, json, php, phps。
fq - (filter query)过滤查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的。
配置SolrCloud
准备工作
新建目录D:\solr-cloud作为存放目录
假设有3台服务器,分别新建目录
D:\solr-cloud\server1
D:\solr-cloud\server2
D:\solr-cloud\server3
下载zookeeper
下载地址:http://zookeeper.apache.org/releases.html
解压zookeeper到每个server目录下
配置zookeeper
在serverN目录下新建data目录和dataLog目录
在data目录下创建文件myid,内容为server目录名里的数字(server1=1,server2=2,server3=3…)
解压zookeeper到每个server目录,以下用server1为例
进入zookeeper-3.4.9\conf,复制zoo_sample.cfg另存为zoo.cfg
修改zoo.cfg
#数据目录
dataDir=D:/solr-cloud/server1/data
#存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir,事务日志的写性能直接影响zk性能。
dataLogDir=D:/solr-cloud/server1/dataLog
#事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。
clientPort=2181(server2为2182、server3中为2183)
#server.x=[hostname]:nnnnn[:nnnnn]
#这里的x是一个数字,与myid文件中的id是一致的。
#右边可以配置两个端口,第一个端口用于F和L之间的数据同步和其它通信,
#第二个端口用于Leader选举过程中投票通信。
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
启动zookeeper
进入zookeeper-3.4.9\bin,双击zkServer.cmd即可启动zookeeper
重复以上操作配置和启动server2和server3的zookeeper
启动solr
解压solr到每个server目录
执行以下命令启动solr
D:\solr-cloud\server1\solr-6.4.1\bin\solr start -s D:\solr-cloud\server1\solr-6.4.1\server\solr -p 8981 -c -z "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"
D:\solr-cloud\server2\solr-6.4.1\bin\solr start -s D:\solr-cloud\server2\solr-6.4.1\server\solr -p 8982 -c -z "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"
D:\solr-cloud\server3\solr-6.4.1\bin\solr start -s D:\solr-cloud\server3\solr-6.4.1\server\solr -p 8983 -c -z "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"
上传solr配置
进入solr-6.4.1\server\scripts\cloud-scripts
执行以下命令
zkcli -zkhost "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183" -cmd upconfig -confdir D:\solr-cloud\server1\solr-6.4.1\server\solr\configsets\data_driven_schema_configs\conf -confname test
创建collection
用浏览器访问http://127.0.0.1:8983/solr还是空的,需要创建collection
进入collections页面,点击[Add Collection]按钮,
Name是collection名称
ConfigSet选择刚才上传的配置test
numShards是创建2个逻辑分片
replicationFact是每个分片下有2个备份(1主1从)
创建成功后就能看到如下图