solr入门教程

Posted Java小学生的成长日志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solr入门教程相关的知识,希望对你有一定的参考价值。

一. 前言

    至于为什么要用Solr5.5,因为最新的6.10没有中文的分词器支持,这里使用的是ik分词器,刚好支持到5.5

下载完之后使用maven命令,mvn package即可生成jar文件,或者下载我编译好的:

solr入门教程


solr入门教程


二, 安装配置

    下载完成之后,解压Solr文件,解压Tomcat

2.1. 在Tomcat安装solr,并建立solrcore

1). 在Solr5.5目录下的server/solr-webapp/webapp 重命名为solr,并且放置到Tomcat/webapp的目录下

2)打开Tomcat/webapp/solr/WEB-INFL/web.xml

3)新建一个文件夹,不要中文目录,用来做solrHome,也就是solrCore的实力存放的位置

5)

    

solr入门教程

6)在Tomcat/webapp/solr/WEB-INF/文件夹中,建立classes目录

7)把solr5.5/server/resource/log4j.properties复制到上一步建立的classes目录中

8)把solr5.5/server/lib/ext/目录下的所有jar文件复制到Tomcat/webapp/solr/WEB-INF/lib/中,这是一些日志用的jar包,不然启动报错

9)这个时候,可以输入http://ip:port/solr/admin.html来访问到solr的控制界面了

10)接下来就是创建solrCore

11)目前solrHome目录是空的,我们创建一个空文件夹core1,这个就是我们的一个实例,然后把solr5.5/server/solr/configsets/sample_techproducts_configs/config/这个文件复制到solrHome/core1中.

12)把solr5.5/server/solr/solr.xml复制到solrHome目录下

13)在solr的管理控制台界面,添加一个sore1

14) 

solr入门教程

15) 这下就创建成功了一个实例core1,yge,请注意我打马的部分,需要先执行第11步操作,否则的话,会无法创建solr core,也就是会有错误信息,这是solr的一个bug,但是至今没有修复


2.2 安装ik中文分词器

    1)准备好ik分词器的jar包,可以自己编译,也可以下载我生成的,然后把它赋值到Tomcat/webapp/solr/WEB-INF/lib里面.(千万不要赋值到Tomcat/lib中,这样会找不到lucen的类)

    2)打开solrHome/core1/conf/managed-schema文件,在最下方,追加如下配置

    3)

solr入门教程

    4)启动Tomcat,即可看到text_ik分词

    

solr入门教程


2.3. 插入的文档必须与域相匹配

    域,我个人也称它为字段,它在solr中有特定的含义,就类似数据库中表的列一样,规范着写入的数据,我们先来做一个例子.

    

solr入门教程


可以看到,我这次插入的文档,有id,title,当然,在solr中,每一条记录都必须有着一个唯一的id,它就类似数据库中的主键,不可重复,这条记录的插入是成功的.

    但是,如果我把title改为title1,这就与定义的字段不一样了,就会报错,如下图所示:

    

solr入门教程

可以看到,这里提示,位置的地段title1


2.4 域的定义 field 

    先拿出一条配置来看一下

solr入门教程

认识一下这些属性:

    name: 域名

type: 域的类型,必须匹配类型,不然会报错

indexed:是否要作索引

stored:是否要存储

required:是否必填,一般只有id才会设置


2.5配置动态域 dynamicField

同样的,也先拿出一条来看看

solr入门教程

何为动态域呢?就是这个域的名称,是由表达式组成的,只要名称满足了这个表达式,就可以用这个域

同样的认识一下这些属性:

    name:域的名称,该域的名称是通过一个表达式来指定的,只要符合这个规则,就可以使用这个域,比如aa_i,bb_i,只要满足这个表达式皆可.

    type:对应的值类型,相应的值必须满足这个类型,不然就会报错.

    index:是否要索引

    stored:是否要存储

    ...其他的属性与普通的域一致


2.6 主键域 uniqueKey

    给出一条配置

    

solr入门教程

指定一个唯一的主键,每一个文档中,都应该有一个唯一的主键,这个值不要随便改.


2.7 复制域 copyField 

    给出一条配置:

    

solr入门教程

说明一下相应的属性:

    source:源域

    dest:目标域

复制域,将源于的内容复制到目标域中

注意: 目标域必须是允许多值的,如下,nultivalued必须为true,因为可能多个源域对应一个目标域,所以他需要以数组来存储

solr入门教程


2.8 域的类型 fieldType

同样的给出一段配置,这段稍微有点复杂,

    

solr入门教程


给出相应属性的说明:

    name: 域的名称

    class: 指定solr的类型

    analyzer: 分词器的配置

        type: index(索引分词器),query(查询分词器)

        tokenizer: 配置分词器

        filter: 过滤器


2.9业务字段的实际配置

    经过上面的学习,差不多了解了一些常用的配置,如今我们用field来配置实际的业务地段,有属性如下:

solr入门教程

当然,中文分词还是要用的,因为我们在前面的2.2章节中,已经配置了一个fieldType的中文分词,所以我们现在一律用中文分词的域类型,


主键id就不需要配置了,默认已经把id配置为主键了,默认的配置如下:

    

solr入门教程

商品名称(需要分词,需要存储)

    

solr入门教程

商品分类(不需要分词,需要存储)

solr入门教程

商品分类名称(需要分词,需要存储)

solr入门教程

商品价格(不分词,需要存储)

solr入门教程

商品描述(需要分词,不需要存储)

solr入门教程

商品图片(不粗要分词,需要存储)

solr入门教程


复制域的应用:

    前面我们了解了复制域,但是却不知道它的应用场景,现在我们结合实际情况来讲一下复制域,

    用户在搜索框搜索的时候,有可能输入的是商品名称,也有可能输入的是商品描述,也有可能输入的是一个商品类型,那么这些值的搜索,肯定在后台对应一个域的,那么既然如此,我们就可以把这些域合并成一个,这样在后台只需要单独的对这一个域进行搜索就可以了

    先定义一个目标域:

    

solr入门教程

复制域,把商品名称,商品描述,商品类型名称赋值到上面的这个域中

solr入门教程


2.10 dataimport 导入数据库数据

    solr默认是没哟开启dataimport这个功能的,所以我们要经过一点配置来开启它,

1)首先找到solr5.5/dist/solr-dataimporthandler-5.5.2.jar,把这个文件复制到Tomcat/webapp/solr/WEB-INF/lib/下,并且找到相应的数据库的驱动包,也同样放到该目录,我这里用的是mysql的驱动包

2)找到solr5.5/example/example-DIH/solr/db/conf/db-data-config.xml,把其复制到solrHome/core1/conf下,并改名为data-config.xml

3)找到solrHome/core1/conf/solrconfig.xml,并打开,在里面添加一段内容,如下

 4)

    

solr入门教程

5)打开并编辑data-config.xml,完整的配置文件如下:

    

solr入门教程

7)重启Tomcat,然后会看到如下页面

 8)

    

solr入门教程

9) 点击蓝色的按钮,则开始导入,导入过程一句数据量的大小,需要的时间也不同,可以点击右边的refresh status 来刷新状态,可以查看当前导入了多少条.

10)成功导入如下

11)

    

solr入门教程


三. solrj的使用

    

solr入门教程

上面一章节已经讲完了solr的安装与配置,现在说一下使用solrj来维护solr的索引及操作,solrj就是一个java的客户端,是一个jar包的使用

    首先引入maven的依赖,solrj的版本号要对应solr的版本号

    

solr入门教程


3.1 增加及修改

    首先说明,在solr中,增加与修改都是一回事,当这个id不存在时,则是添加,当这个id存在时,则是修改

    代码很好理解,直接给出:

    

solr入门教程


3.2 删除索引 

删除的代码也直接给出,看代码里面的注释就可以了

    

solr入门教程


3.3 查询条件 

    查询稍微复杂一点,但是与solr管理界面的条件一致
    这里先给出一些查询的说明,建议查看这篇文章,个人感觉还是不错的

q - 查询字符串,如果查询所有 *:*(id:1)

fq - (filter query) 过滤查询,过滤条件,基于查询出来的结果

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

start - 分页开始

rows - 分页查询数据

sort - 排序,格式: sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]...示例:(score dest , price asc),表示先按"score"降序,再按"price"升序,默认是相关性降序

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

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

q.op - 表示q中,查询语句的各种条件的逻辑操作AND(与) OR(或)

h1 - 是否高亮,如 h1=true

h1.f1 - 高亮field, h1.f1=name,sku

h1.snippets - 默认为1,这里设置为3个片段

h1.simple.pre  - 高亮前面的格式

h1.simle.post - 高亮后面的格式

facet - 是否启动统计

facet.field - 统计field


  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]


   



以上是关于solr入门教程的主要内容,如果未能解决你的问题,请参考以下文章

solr:入门

Apache Solr初学者教程(入门之旅)

Solr 4.0 部署实例教程

solr入门

Solr集群搭建详细教程

solr教程无法创建集合