一、Solr介绍
1.简介:Solr是基于Lucene的面向企业搜索的web应用,Sole是一个独立的企业级搜索应用服务器,高性能,采用java5开发,Solr是由两个部分构成:Solr的web服务和Solr的索引库
2.Lucene:Lucene是一个高效的,基于java的全文检索库
3.全文检索的概念:全文数据库是全文检索系统的主要构成部分。所谓全文数据库是将一个完整的信息源的全部内容转化为计算机可以识别、处理的信息单元而形成的数据集合。全文数据库不仅存储了信息,而且还有对全文数据进行词、字、段落等更深层次的编辑、加工的功能,而且所有全文数据库无一不是海量信息数据库。
二、在Centos上安装Solr单机版
1.安装环境,JDK、tomcat的配置
2.解压solr的安装包
3.进入解压好的solr,进入example/webapps,将solr.war拷贝到tomcat的webapp
4.启动tomcat,会自动将war包解压
5.添加服务中所依赖的jar包,注意要先把tomcat/webapp下的solr.war删除
这时solr的服务已经安装完毕了
接下来安装索引库
1.创建索引库,将solr解压目录下的/example/solr拷贝到索引库中
2.在solr的服务中配置索引库
3.测试访问
三、Solr管理界面介绍
Dashboard:仪表盘,访问http://solr服务器Ip:端口/solr服务主目录,可以看到
Logging:日志,显示solr运行出现的异常或错误、警告等各种信息
Core Admin:(core管理)核心管理
主要有Add Core(添加核心),Unload(卸载核心),Rename(重命名核心),Reload(重新加载核心),Optimize(优化索引库)
Add Core是添加core:主要是在instanceDir对应的文件夹里生成一个core.properties文件
name:给 core 起的名字;
instanceDir:与我们在配置solr 到 tomcat 里时的 solr_home 里新建的 core 文件夹名一致;
dataDir:确认 AddCore 时,会在 new_core 目录下生成名为 data的文件夹 config:new_core 下的 conf 下的config 配置文件(solrconfig.xml)
schema: new_core 下的 conf 下的 schema 文件(schema.xml)
Java Properties:可以查看到java相关的一些属性的信息
Thread Dump:查看每个线程的详细信息,以及状态信息
Core Selecter(core选择器):选择solrCore
Overview:包含基本统计如当前文档数;和实例信息如当前核心的配置目录
Analysis:检验分词效果
Documents :(索引文档)索引的相关操作,如:增加,修改,删除等
在如下页面,选择/update ,文档格式选择 json ,然后 submit 提交。这样 索引就增 加上了。修改与增加一样,都是/update ,删除为/delete 。 成功之后,我们去 query 里查询数据 就能查到我们刚添加的数据.
Files:solr_home 下的 core 下的 conf 下的相关文件,可单击查看里面的内容
Ping:查看当前核心库还是否工作的以及响应时间
Plugins /stats:Solr 自带的一些插件以及我们安装的插件的信息以及统计
Query:查询的结果要显示哪个字段,就得将schema.xml 文件配置字段时的 stored 属性设为true
Request-Handler(qt): 请求处理器(不重要,并非详细就重要)
q: 查询字符串(必须的)。:表示查询所有;keyword:尚学堂 表示按关键字“尚学堂” 查询
fq: filter query 过滤查询。使用 Filter Query 可以充分利用 Filter Query Cache,提高检索 性能。作用:在 q 查询符合结果中同时是 fq 查询符合的(类似求交集),例如: q=mm&fq=date_time:[20081001 TO 20091031],找关键字 mm,并且 date_time 是 20081001 到 20091031 之间的。
sort: 排序。格式如下:字段名 排序方式;如 id desc 表示按 id 字段降序排列查询结果。
start,rows:表示查回结果从第几条数据开始显示,共显示多少条。
fl: field list。指定查询结果返回哪些字段。多个时以空格“ ”或逗号“,”分隔。不指 定时,默认全返回。
df: default field 默认的查询字段,一般默认指定。
Raw Query Parameters: 原始查询参数的
wt: write type。指定查询输出结果格式,我们常用的有 json 格式与 xml 格式。在 solrconfig.xml 中定义了查询输出格式:xml、json、python、ruby、php、csv。
indent: 返回的结果是否缩进,默认关闭,用 indent=true | on 开启,一般调试 json,php,phps,ruby 输出才有必要用这个参数。
debugQuery: 设置返回结果是否显示 Debug 信息。
hl: high light 高亮。hl=true 表示启用高亮
hl.fl : 用空格或逗号隔开的字段列表(指定高亮的字段)。要启用某个字段的 highlight 功能,就得保证该字段在 schema 中是 stored。
hl.simple.pre: 设置高亮显示的 html 标记的开始标记 hl.simple.post:设置高亮显示的 html 标记的结束标记
hl.requireFieldMatch: 如果置为 true,除非该字段的查询结果不为空才会被高亮。它 的默认值是 false,意味 着它可能匹配某个字段却高亮一个不同的字段。如果 hl.fl 使用了通 配符,那么就要启用该参数。尽管如此,如果你的查询是 all 字段(可能是使用 copy-field 指 令),那么还是把它设为 false,这样搜索结果能表明哪个字段的查询文本未被找到
hl.usePhraseHighlighter:如果一个查询中含有短语(引号框起来的)那么会保证一 定要完全匹配短语的才会被高亮。
hl.highlightMultiTerm:如果使用通配符和模糊搜索,那么会确保与通配符匹配的 term 会高亮。默认为 false,同时
hl.usePhraseHighlighter 要为 true。
facet:分组统计,在搜索关键字的同时,能够按照 Facet 的字段进行分组并统计。
facet.query:Facet Query 利用类似于 filter query 的语法提供了更为灵活的 Facet.通 过 facet.query 参数,可以对任意字段进行筛选。
facet.field:需要分组统计的字段,可以多个。
facet.prefix:表示Facet 字段值的前缀。比如 facet.field=cpu&facet.prefix=Intel, 那么对 cpu 字段进行 Facet 查询,返回的 cpu 都是以 Intel 开头的, AMD 开头的 cpu 型号将 不会被统计在内。
spatial: spellcheck: 拼写检查
Replication:显示你当前 Core 的副本,并提供disable/enable 功能
Schema:展示该 Core 的shema.xml 文件中的内容
三、Solr索引库目录结构
1.Solr.xml:配置solr集群
2.collection1:索引库,solr core
3.core.properties:设置索引库的名称
4.data:存放索引
5.conf:索引库的配置目录
5.1schema.xml:配置字段以及字段类型
Solr索引库—schema.xml详解
schema.xml:是用来定义索引数据中的域的,包括域名称,域类型,域是否索引,分词,是否存储等等
<field>:定义“域”,(关系型数据库的字段)
<fieldType name="string" class="solr.StrField" sortMissingLast="true" /> Name:域类型的名称,
<copyField>:复制域,可实现更新和查询分离(也可实现多个查询域合一查询)
<copyField source="item_title" dest="item_keywords"/>
Source:源域
Dest:目标域
四、Solr的索引机制
Solr的索引机制分为:正排索引(正向索引)和倒排索引(反向索引)
正排索引:是以文档的ID为关键字,索引文档中每个字的位置信息,查找时扫描索引中每个文档中字的信息知道找出所有包含查询关键字的文档,检索效率低
倒排索引:对数据进行分析,抽取出数据中词条,以词条作为key,对应数据的存储位置作为value,实现索引的存储,这种索引称为倒排索引
当Solr存储文档时,solr会首先对文档数据进行分词,创建索引库和文档数据库
分词是指:将一段字符文本按照一定的规则分成若干个单词
或者参考:插画理解Elasticsearch(原标题:终于有人把Elasticsearch原理讲透了!)
五、配置中文分词器IK Analyzer
当我们在solr中存储中文信息时,IK Analyzer 会智能对中文字、词、组进行分词反向索引,由于Solr的开发者是歪果仁,所以需要另外的中文分词插件
1.下载中文分词器并解压
2.在solr服务的WEB-INF目录下创建classes目录(默认是没有的),并将中文分词器的配置文件拷贝到classes目录
3.依赖的jar包放到solr/WEB-INF/lib/目录下
4.在/usr/local/solrhome/solr/collertion1/conf/schema.xml中配置中文分词器
使用插件后的中文分词
六、SolrJ
1.简介:SolrJ是访问Solr服务的Java客户端,提供索引和搜索的请求方法,SolrJ通常嵌入在业务系统中,通过solr的API接口操作和Solr服务,单独使用时还需要导入commons-logging
通过SolrJ向索引库中添加文档
1.创建maven项目,在pom.xml中添加SolrJ的依赖
2.编写测试类,创建solrj的连接对象,创建solr的文档对象,将文档添加到solr的索引库中
3.提交事务,查看solrCore
通过SolrJ查询索引库中的文档
1.创建solrj的连接对象
2.创建查询条件
3.设置分页条件
4.执行查询,获取查询结果
5.遍历结果,执行测试
通过SolrJ删除索引库中的文档
1.编写测试类,创建连接对象
2.设置删除格式
3.事务提交,查看solrCore