solr6.3 相关特性及环境搭建

一、solr介绍

solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。

二、solr的特性包括

模式

Solr 同时支持无模式和模式。

无模式(数据驱动模式)能够方便的切换到使用配置模式的生产环境。

字段类型

Solr可以很方便的定义混合类型字段,并且不需要编写代码就可以匹配lucene分析程序。

动态字段

动态添加新的字段,并且根据字段名称自动映射字段类型。

复制字段

支持对同一份内容使用不同的方法进行分析。

过滤词汇

支持通过外部配置文件设置无用词列表,同义词列表和受限词列表。

分析组件

支持多个文本分析组件,包括分词,正则表达式和遏制等。

可扩展

支持应用程序方便的处理其专有格式和solr不支持的数据类型。

Querying

REST接口

使用REST接口,支持与各种语言交互。

字段排序

支持对任意个字段进行排序。

查询函数

提供了强大的基于数据相关性优化的功能。

调优选项

提供相关性调优选项使应用程序优化结果以便符合其需要。

查询解析

提供多个查询解析方法,使solr容易找到您需要的数据。

查询处理方式配置

支持配置请求处理方式为服务端处理,简化应用程序处理。

查询过滤器

支持应用设置多种查询过滤器。

可插拔的查询解析器

支持应用提供自定义的查询解析器。

游标

支持下一代NoSQL数据存储和分析特性游标。

准实时搜索

支持访问刚刚添加或者更新的文档。

Faceting

Solr 将以导航为目的的查询结果成为facet。它不会修改查询结果信息,只是在查询结果上根据分类添加了count信息,然后用户根据count信息做进一步的查询。

比如淘宝的查询列表中,上面会显示不同类目相关查询结果的数量。

比如搜索数码相机,在搜索结果栏会根据厂商、分辨率等维度列出。这里厂商、分辨率就是一个个facet

在厂商下面会有nikoncanonsony等品牌,这个叫约束(constraint)。

然后根据选择,列出当前的导航路径,这个叫面包屑(breadcrumb)。

分层面

支持以多种方式分组和组织用户数据。

性能优化

支持细粒度的控制,以便在CPU和内存资源间找到平衡。

多条件查询

支持多条件查询,包括范围查询,日期查询等,以及多条件组合查询。

Discovery

集群、拼写检查、自动完成,更方便地帮助用户查找内容。

输入联想

支持输入联想,方便用户更快的查找。

Carrot2聚类工具

集成Carrot2聚类工具,支持动态搜索结果聚类。

拼写检查

支持拼写检查,方便用户更准确的查找。

高亮配置

支持高亮配置,是用户更聚焦查询结果。

Plugins and Extensions

支持插件

支持插件功能,比如在语言检查、集群、数据导入等方面,应用都可以实现自己的插件。

扩展接口

定义良好的扩展接口,比如建立索引、查询解析、请求处理等接口,方便应用编写自己的处理插件和是否使用该功能。

Statistics and Aggregations

商业智能

支持复杂的数学分析以及基于搜索的下一代商业智能。

Spatials

位置感知搜索。

地理位置在空间搜索中至关重要!地理位置不仅在地产中至尊为王,将其用在搜索中还能帮助位于特定位置的用户快速找到有用的信息。例如,如果您是企业名录提供商(比如一个黄页站点),当用户需要找一位水管维修员时,该站点必须返回在用户住所附近的维修员。如果您运营的是一个旅游站点,那么您必须让旅游者能够搜索到他们所在的位置附近的名胜,从而帮助他们丰富旅游行程。如果您要构建一个社交网络站点,那么最好使用位置信息来帮助用户与朋友联系。位置感知设备(比如汽车导航系统和支持 GPS 的摄像机)和大量免费地图数据的普及为构建能够为终端用户搜索高级结果的 Geographical Information Systems (GIS) 提供了各种机会。

开箱即用的支持位置感知搜索

使应用程序能够发现和基于位置的内容进行过滤。

支持多种空间数据

广泛支持代表复杂空间数据,如:多边形,纬度/经度等。

支持复杂查询功能

支持多种查询条件,如:多边形,纬度/经度等。

集成Java 拓扑库

集成Java拓扑库,提供了先进的空间数据处理能力。

Rich Content

集成Apache Tika

无需编写一行代码能够提取和处理丰富的内容类型。

支持多种数据格式

处理各种数据类型,包括JSONXML、办公文档、CSV等。

灵活和可扩展的输入和输出格式

方便应用与Solr进行自定义格式的交互。

高级处理选项

很容易控制提取内容索引和如何建立索引。

Performance

支持分页查询,limit关键字限制查询记录数。

支持性能的调优

提供经过良好测试的性能,以及细粒度的调优参数。

支持集群

支持单节点到多节点的分布式集群的一键式升级。

支持智能缓存

多种智能缓存方式,严格控制重复的结果。

支持lucence最新版本

总是建立在最新最好的Lucene上,利用Lucene性能增强而增强自身性能。

支持编解码器

支持的编解码器,替代目录实现和提供先进的性能调优的选择。

Scaling with SolrCloud

支持增加和删除节点

根据需要添加和删除计算能力,同时让Solr做负载平衡。

支持碎片分裂

碎片分裂很容易逐步增加处理能力,不需要对已有内容重新建立索引。

支持一致性

Solr基于zookeeper支持一致性和避免分裂问题。

支持内置用户界面

内置的用户界面,提供集群运行状态。

支持数据安全

先进的事务日志,复制和故障转移功能帮助减少数据丢失。

支持定期大规模测试

大规模定期测试,处理成千上万的计算节点和数十亿的文档的查询量。

User Interface

支持监控报表

广泛的报告和控制接口可以很容易理解和改变Solr的运行状态,包括性能数据。

支持查看线程,日志和系统属性

支持调试,包括查询接口和高级分析接口。

三、tomcat8下部署solr

1.准备工作

注意:环境版本必须要求一致,已测

目前最新版本6.3。下载地址:http://www.apache.org/dyn/closer.lua/lucene/solr/6.3.0

Jdk8solr6.0是基于jdk8开发的】 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

tomcat8.0 下载地址:http://tomcat.apache.org/download-80.cgi

在说明搭建环境之前,其实solr5.0之后 solr已经内置jetty服务器,可以自行启动。但是为了加入自己的特性,以及在solr基础之上的应用,此文章主要针对发布在tomcat8上。

2. 部署solr

1、将【solr-6.3\server\solr-webapp】下的webapp文件拷贝到【apache-tomcat-8.5.8\webapps】目录下, 并将webapp重命名为solr(可以重命名为取任意名称)。solr文件目录如下:

 

2、将【solr-6.3\server\lib\ext】下的所有jar包拷贝到【apache-tomcat-8.5.8\webapps\solr\WEB-INF\lib

3、将【solr-6.3\server\resources】下的log4j.properties配置文件拷贝到【apache-tomcat-8.5.8\webapps\solr\WEB-INF\classes】,如果WEB-INF下没有classes文件那么就创建一个classes文件夹。

4、在【apache-tomcat-8.5.8\webapps\solr】下新建一个文件【solrhome(文件夹名称可以任意命名)】,将【solr-6.3\server\solr】下的所有文件拷贝到刚刚创建的solrhome中。文件中包含如下:

 

5、修改【apache-tomcat-8.5.8\webapps\solr\WEB-INF】下的web.xml,找到如下代码:

1. <env-entry>  

2.        <env-entry-name>solr/home</env-entry-name>  

3.        <env-entry-value>/put/your/solr/home/here</env-entry-value>  

4.        <env-entry-type>java.lang.String</env-entry-type>  

5.     </env-entry>  

默认是注解掉,放开注解,并将<env-entry-value>中的值修改为刚刚步骤7中的solrhome目录,如:

D:\Program Files\apache-tomcat-8.5.8\webapps\solr\solrhome

如果在linux下部署,这里要改成linux目录,目前linuxslorhome路径为:

/opt/apache-tomcat-8.5.8/webapps/solr/solrhome

6、运行tomcat,运行成功后访问:http://localhost:8080/solr/index.html 即可得到如下界面:

 

四、solr导入数据

1.可以使用DIH(DataImportHandler)从数据库导入数据

   (1) webappssolrhome下新建一个文件夹名字叫做mynode(名字不固定,可以随便取,但是这个名字在后面的配置中会有所关联。)然后在mynode文件下新建一个名字叫做conf的文件夹(这个文件名字最后不要改。)然后把官网下下来的solr项目中solr-6.3\server\solr\configsets\data_driven_schema_configs\conf下的所有东西复制到conf中去。(注意不要复制错!)最后把solr-6.0\solr-6.3\example\example-DIH\solr\db\conf下的admin-extra.htmladmin-extra.menu-bottom.html admin-extra.menu-top.html三个文件也复制到conf中去。

   (2) mysql所需的jar包和solr-6.0\solr-6.3\dist下的solr-dataimporthandler-6.3jarsolr-dataimporthandler-extras-6.3jar都复制到项目WEB-INF\lib下。然后在solrconfig.xml文件中加入

<lib dir="D:/Program Files/apache-tomcat-8.5.8/webapps/solr/WEB-INF/lib" regex=".*\.jar" />(就是把WEB-INF\lib里面的jar包配置到项目中,我这里用的是绝对地址。这段代码大约在solrconfig.xml70多行处,前面有一堆类似的代码。) 

注意:Linux下要改为相应的安装路径


   (3)solrconfig.xml的  <requestHandler name="/select" class="solr.SearchHandler">之上添加

 

 

1. <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  

2.      <lst name="defaults">  

3.         <str name="config">data-config.xml</str>  

4.      </lst>  

5. </requestHandler>  

 

   然后在conf下新建data-config.xml文件。里面内容如下:

1. <?xml version="1.0" encoding="UTF-8"?>  

2. <dataConfig>  

3.       <dataSource type="JdbcDataSource"

4.                           driver="com.mysql.jdbc.Driver"

5.                           url="jdbc:mysql://ip:port/table"

6.                           user=" "

7.                           password=" "/>   

8.    <document>  

9.                           <entity name="user" pk="id"

10.                                   query="select id,username,password,state,create_time from user"

11.                                   deltaImportQuery="select id,username,password,state,create_time from user where ID='${dataimporter.delta.id}'"

12.                                   deltaQuery="select id from user where create_time > '${dataimporter.last_index_time}'"  

13.                                   deletedPkQuery="select id  from user where id=0">  

14.                                <field column="id" name="id" />  

15.                                <field column="username" name="username" />  

16.                                <field column="password" name="password"/>  

17.                                <field column="state" name="state"/>

18.                                <field column="create_time" name="create_time"/>

19.                           </entity>  

20.                  </document>

21. </dataConfig>  

说明:  dataSource是数据库数据源。Entity就是一张表对应的实体,pk是主键,query是查询语句。Field对应一个字段,column是数据库里的column名,后面的name属性对应着solrFiled的名字。其中solrdata是数据库名,user是表名。

  其中deltaQuery是增量索引,原理是从数据库中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID号。然后根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即为这次增量导入所要处理的数据。核心思想是:通过内置变量“${dih.delta.id}”“${dataimporter.last_index_time}”来记录本次要索引的id和最近一次索引的时间。

  最后在conf文件下的managed-schema配置field信息:最后改名为schema.xml

1. <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />  

2.  <field name="username" type="string" indexed="true" stored="false"/>  

3.   <field name="password" type="string" indexed="true" stored="false"/>  

4.   <field name="state" type="string" indexed="true" stored="false" />

5.   <field name="create_time" type="date" indexed="true" stored="false" />

6.    <field name="_version_" type="long" indexed="true" stored="false"/>  

7.    <field name="_root_" type="string" indexed="true" stored="false" docValues="false" />  

8.    <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>

其中id,username,password,state,create_time是上面提到的数据库字段。下面三个field是系统本身的不能删除,否则会运行错误。

   (4)启动tomcat,并在URL中输入http://127.0.0.1:8080/solr/index.html路径。选择Core admin 输入如下设置:


设置好之后,点击Add Core按钮,进行设置,设置成功后,再core Selector选择刚刚添加的core

 

  选择刚刚添加的user实体进行索引操作:我们这儿可以选择full-import或者delta-import(增量索引),选择增量索引需要把clean的勾给去掉,不然会清除之前的,增量的索引的初衷是对新增或者修改的记录重新索引,会追加到原有的索引文件当中。当我们选择full-import的时候,最好就是把原有的索引文件给清空重新索引。

 

索引成功如下如所示:


使用query进行测试,输入starzou查出了starzou

 

这就成功的配置完了MYSQL数据库了

solr查询数据

1. 常用查询参数说明 

q - 查询字符串,这个是必须的。如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京)

fq - filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=Name:张三&fq=CreateDate:[20081001 TO 20091031],找关键字mm,并且CreateDate20081001

fl - 指定返回那些字段内容,用逗号或空格分隔多个。 

start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。 

rows - 指定返回结果最多有多少条记录,配合start来实现分页。 

sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(score desc, price asc)表示先 “score” 降序 “price” 升序,默认是相关性降序。 

wt - (writer type)指定输出格式,可以有 xml, json, php, phps 

fl表示索引显示那些field( *表示所有field,如果想查询指定字段用逗号或空格隔开(如:Name,SKU,ShortDescriptionName SKU ShortDescription【注:字段是严格区分大小写的】)

q.op 表示 查询语句的 各条件的逻辑操作 AND() OR(

hl 是否高亮 ,hl=true

hl.fl 高亮field ,hl.fl=Name,SKU

hl.snippets :默认是1,这里设置为3个片段

hl.simple.pre 高亮前面的格式 

hl.simple.post 高亮后面的格式 

facet 是否启动统计 

facet.field  统计field 

【注:以上是比较常用的参数,当然具体的参数使用还是多看solr官方的技术文档】 

2. solr运算符

(1)“:” 指定字段查指定值,如返回所有值*:*

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

(3)“*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)

(4)“~” 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foamroams的单词;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}
(14)/ 转义操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : /

 注:①“+””-“表示对单个查询单元的修饰,and or  not 是对两个查询单元是否做交集或者做差集还是取反的操作的符号

 比如:AB:china +AB:america ,表示的是AB:china忽略不计可有可无,必须满足第二个条件才是对的,而不是你所认为的必须满足这两个搜索条件

 如果输入:AB:china AND AB:america ,解析出来的结果是两个条件同时满足,即+AB:china AND +AB:america+AB:china +AB:america

  总而言之,查询语法:  修饰符 字段名:查询关键词 AND/OR/NOT 修饰符 字段名:查询关键词

3.solr查询语法

(1)最普通的查询,比如查询姓张的人( Name:张),如果是精准性搜索相当于SQL SERVER中的LIKE搜索这需要带引号("",比如查询含有北京的(Address:"北京"

(2)多条件查询,注:如果是针对单个字段进行搜索的可以用(Name:搜索条件加运算符(ORANDNOT) Name:搜索条件),比如模糊查询( Name: OR Name: )单个字段多条件搜索不建议这样写,一般建议是在单个字段里进行条件筛选,如( Name: OR 李),多个字段查询(Name: + Address:北京 

(3)排序,比如根据姓名升序(Name asc,降序(Name desc

七、solr参考文档地址

1.较全的说明

http://blog.csdn.net/awj3584/article/details/16963525

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值