solr简介

 

 

 

1 搜索的分类

 

1.1) 按照被搜索的资源类型
       可以转为文本的: txt  word  ppt pdf
       多媒体类型: 听歌识曲

1.2) 按照搜索的方式
        处理语义:语音搜索
         按照给定的文本来查找相关资源

 

2 全文检索

 

 

2.1) 以文本作为检索对象,找出含有检索对象的资源

2.2) 指标: 全面准确和快速

 

2.3) 特点:  只处理文本; 不处理语义; 搜索时英文不区分大小写; 结果列表有相关度排序

 

3 全文检索与数据库检索的对比

 

3.1) 匹配效果
        数据库  like %pig%    数据集查询结果不精准
         结果:pigeons(鸽子)

3.2)  查询结果是否按照相关度排序
打分机制,比如A文章出现关键词A1 100次 打分更高

3.3)  查询速度***


全文索引下, key(我是中国人) val(文章1,2)快递定位到目标位置
我是中国人   
文章1    ******我是中国人
文章2    ******我是中国人*****

 

 

 

4 全文搜索的工具

 

Lucene
Java家族中最为出名的一个开源搜索引擎,在Java世界中已经是标准的全文检索程序,它提供了完整的查询引擎和索引引擎,没有中文分词引擎,需要自己去实现。
官方主页:http://lucene.apache.org/


solr
Solr是一个用java开发的独立的企业级搜索应用服务器,它提供了类似于Web-service的API接口,它是基于Lucene的全文检索服务器, 对外提供类似于Web-service的API接口,可以通过http请求进行操作。经常用于站内搜索,比如http://zookeeper.apache.org/中的搜索中的搜索。


官方主页:http://lucene.apache.org/solr/


Elasticsearch
Elasticsearch是一个采用java语言开发的,基于Lucene构造的开源,分布式的搜索引擎. 设计用于云计算中,能够达到实时搜索,稳定可靠. Elasticsearch的数据模型是JSON.
官方主页:http://www.elasticsearch.org/

 

 

5 solr 版本:

 

Solr ( Search On Lucene Replication)
Lucene   Http(Servlet/REST)  Schema.xml  Solrconfig.xml
Solr1.x~3.x 
SolrSingle     Solr MutilCore
Solr4.x 
SolrCloud = Solr+Zookeeper

 

6  solr特点:

 

通过HTTP协议处理搜索和查询请求。
增加了缓存,让响应速度更快。
提供了一个基于web的管理界面
查询结果分类(facet)
支持分布式,支持大规模的部署(solrcloud)(Solr4.0版本开始)

7 lucene架构图:

 


 

8  solr架构:

 



 
 

 

 9 solr文档:

 

solr官方网站
http://lucene.apache.org/solr/
solr下载(v4.10.4)
http://archive.apache.org/dist/lucene/solr/4.10.4/
solr文档:
http://archive.apache.org/dist/lucene/solr/ref-guide/
http://lucene.apache.org/solr/4_10_0/tutorial.html

 

quickstart:

https://lucene.apache.org/solr/quickstart.html

 

solr下载地址:  如果想找solr的别的版本的,将后面数字替换成对应版本即可

http://apache.fayea.com/lucene/solr/5.5.0/  

 

solr历史版本下载地址: 

http://archive.apache.org/dist/lucene/solr/ 

 http://apache.fayea.com/lucene/solr/

 

 

 

10 solr启动:

 

a) linux下  tar -zxvf solr-4.10.4.tgz

b) 进入solr/bin执行命令:    启动solr 以8984端口启动,默认是8983

[root@hadoop3 bin]# pwd
/opt/solr4/bin
[root@hadoop3 bin]# solr start -p 8984

 

 

如果指定了不同端口来启动solr后,打开不同浏览器访问:

别的端口访问下会报错如下:

sg=SolrCore 'collection1' is not available due to init failure: Index locked for write for core collection1,trace=org.apache.solr.common.SolrException: SolrCore 'collection1' is not available due to init failure: Index locked for write for core collection1

 

启动后访问链接:  http://hadoop3:8984/solr 即可

 

如果启动不了,如下提示:

[root@hadoop3 bin]# solr start 
Solr home directory /opt/solr4 must contain a solr.xml file! 

 表示找不到solr 家目录,需要用如下命令:  -s  表示指定solr的家目录

 

[root@hadoop3 bin]# solr start -s /opt/solr/example/solr   启动

 

 

 

c) solr常用命令:

 

solr命令讲解(solr-4.10.4/bin/solr)
start, stop, restart, healthcheck
solr start -help
solr start [-f]:启动solr,默认后台运行
solr start -p <port>:指定solr实例端口
solr start -s <dir>:指定solr的solr.solr.home
solr start -d <dir>:指定solrweb项目根路径(项目根路径下必须有webapps/solr.war)
solr -p <port> -V:查看指定solr的运行基本信息
solr -i:查看有多少solr服务正在运行
solr stop -p <port>:停止运行在指定端口的solr服务
solr stop -all:停止所有solr服务

 

 

11  solr  部署在tomcat下

           solr部署在tomcat下 编辑

 

12  solr家目录:

 

    solr解压文件名/example/solr,


  collection1是索引库,其下的 /data是索引文件   /conf是配置文件

 

solr.solr.home指solr core的配置文件的根目录
Solr启动的时候会检查solr.solr.home的Java系统属性,如果没找到的话默认指定solr/目录
使用java -jar start 启动的时候可以通过下面方式指定
java -Dsolr.solr.home=solr/ -jar start.jar
使用solr start 命令启动,默认指定solr/目录,可以用过-s <path> 指定配置文件目录
使用tomcat启动则需要修改solr项目的web.xml文件或者添加JNDI文件(或者使用export命令定义solr.solr.home,仅适用于linux环境)
设置solr.solr.home的几种方式
http://myq526180048.iteye.com/blog/1664127

 

 

 

13  solr日志:   solr解压目录/example/logs下

 


 

 14: solr界面

 

 

 

 

 

 

 solr上传数据三方式:

 

a) Documents方式:



 

 

b)  solr-4.10.4\example\exampledocs 下 post.jar/simpleposttool.java 和 xxx.xml:  上传数据

 

[root@hadoop3 exampledocs]# pwd
/opt/solr/example/exampledocs
[root@hadoop3 exampledocs]# java -jar post.jar hd.xml
SimplePostTool version 1.5
Posting files to base url http://localhost:8983/solr/update using content-type application/xml..
POSTing file hd.xml
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/update..
Time spent: 0:00:00.192

 

c)  solr-4.10.4\example\exampledocs 下 post.sh 方式上传:

 

[root@hadoop3 exampledocs]# post.sh money.xml
Posting file money.xml to http://localhost:8983/solr/update
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">8</int></lst>
</response>

<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">17</int></lst>
</response>

 

 

15 solr schema:

 

solr-4.10.4\example\solr\collection1\conf\schema.xml :   
indexed=true  stored=true 是否索引 是否存储   required=true   multivalued=多值   
dynamicfield 动态字段 字段符合动态字段写法规范时就是动态字段定义的类型

copyfield:  文章= 标题+内容   --->  
<copyField source="title" dest="text"/>   将 title和author里的内容合并到 text这个字段里 查询的时候如果在text这个字段中查到 就不需要再去title author每一个来匹配了
<copyField source="author" dest="text"/>  这样这篇文章就是我们关键词存在的文章了。

 

 

 

 

16   solr查询界面参数:

 

q: *:* --->  id:zm1   id:zm?    空格 or  || 表示一个意思 或者
  price:350    price:[300 TO 400] TO要大写    闭区间
  
fq: filter query  
 id:234   过滤id为234的 可以设置多次 多次后会获取这个交集 
 
sort : 就是 order by 
       price asc/desc   后面必须带上升降序
	   
	   

fl:  filter list  过滤只显示里面填写的字段 , 多字段下用 id,name这种方式写

df:  default field 默认查询text这个字段, 如果在q查询条件中不写 name:zm 而是直接写成 zm, 
  solrconfig.xml中:定义 df为默认字段 text, 如果写id或者别的字段比如name 并且在q内没有指定列名而是列值zm  , 就表示直接查询name=zm的数据 
  <requestHandler name="/select" class="solr.SearchHandler">
    <!-- default values for query parameters can be specified, these
         will be overridden by parameters in the request
      -->
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">10</int>
       <str name="df">text</str>
     </lst>

wt: write type 写出去的类型,

hl: high ligth 高亮

facet: 分组

 


 
17 Solr的检索运算符
 
1. “:” 指定字段查指定值,如返回所有值*:*

2. “?” 表示单个任意字符的通配

3. “*” 表示多个任意字符的通配

4. “~” 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。

5. 邻近检索,如检索相隔10个单词的”apache”和”jakarta”,”jakarta apache”~10

6. “^” 控制相关度检索,如检索jakarta apache,同时希望去让”jakarta”的相关度更加好,那么在其后加上”^”符号和增量值,即jakarta^4 apache

7. 布尔操作符AND、||

8. 布尔操作符OR、&&

9. 布尔操作符NOT、!、- (排除操作符不能单独与项使用构成查询)

10.“+” 存在操作符,要求符号”+”后的项必须在文档相应的域中存在

11. ( ) 用于构成子查询

12. [] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710]

13. {} 不包含范围检索,如检索某时间段记录,不包含头尾

date:{200707 TO 200710}
 
 
18  solr 查询参数 fq:
fq 值是一个查询,用于过滤查询结果,在负责查询时,可以很好的提高查询效率,fq 查询的内容会被缓存着,下次使用相同的过滤查询时,可以从缓存中命中。
使用 fq 参数时需要注意以下几点
在一个查询中,fq 参数可以设置多次。结果中将返回这些过滤条件的交集
过滤查询的结果将被分别缓存
使用filter query可以充分利用filter query cache,提高检索性能。
 
 
19 solr 查询参数hl:
hl.fl:用空格或逗号隔开的字段列表
注意:要启用某个字段的高亮功能,需要保证这个字段在schema中是store。
hl.simple.pre:前缀
hl.simple.post:后缀



对于multiValued=true的字段不要设计高亮显示
因为solr对于这个字段里面的多个值只会返回匹配高亮的那个值
高亮时记得你的schema.xml文件中要配主键(<uniqueKey>id</uniqueKey>)
因为solr对高亮的设计是,高亮部分跟结果集部分是分开返回的,如果没有配主键,那么高亮部分就无法和结果集匹配,不能够确定高亮的是哪条记录的。
 
20solr 查询参数 facet:
(类似于sql中的group by)
facet.query  
price:[* TO 20]
price:[21 TO *]
在Raw Query Parameters中可以查询多个
facet=on&facet.query=price:[* TO 20]&facet.query=price:[21 TO *]
facet.field
根据某个字段进行分组统计
facet.prefix
表示Facet字段值的前缀.比如”facet.field=cpu&facet.prefix=Intel”,那么对cpu字段进行Facet查询,返回的cpu都是以”Intel”开头的,”AMD”开头的cpu型号将不会被统计在内
 
 
21  solr 添加多个索引库:
solr-4.10.4\example\solr\collection1\core.properties  有几个这种文件是决定有几个索引库
其文件内容为:  name=collection1
cp -r collection1/  collection2/
进入 more core.properties  ====>  修改此文件 name=collection2  然后重启 这样就会有两个索引库
页面unload 这个新的库后,此文件名会变更为 collection2/core.properties.unload, 对应的数据不会删除掉
仅仅是这个关键文件名字变化而不会被索引库加载到而已。
 

 
 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值