Solr与配置IK分词器、SolrJ

一、Solr介绍

    1.简介:Solr是基于Lucene的面向企业搜索的web应用,Sole是一个独立的企业级搜索应用服务器,高性能,采用java5开发,Solr是由两个部分构成:Solr的web服务和Solr的索引库

Solr简介

    2.Lucene:Lucene是一个高效的,基于java的全文检索库

Lucene

    3.全文检索的概念:全文数据库是全文检索系统的主要构成部分。所谓全文数据库是将一个完整的信息源的全部内容转化为计算机可以识别、处理的信息单元而形成的数据集合。全文数据库不仅存储了信息,而且还有对全文数据进行词、字、段落等更深层次的编辑、加工的功能,而且所有全文数据库无一不是海量信息数据库。

全文检索的概念

二、在Centos上安装Solr单机版

    1.安装环境,JDK、tomcat的配置

    2.解压solr的安装包

解压solr的安装包

    3.进入解压好的solr,进入example/webapps,将solr.war拷贝到tomcat的webapp

将solr.war拷贝到tomcat的webapp
查看拷贝结果

    4.启动tomcat,会自动将war包解压

启动容器
启动后的webapp目录

    5.添加服务中所依赖的jar包,注意要先把tomcat/webapp下的solr.war删除

添加依赖

删除原来的solr.war
拷贝所有的依赖

        这时solr的服务已经安装完毕了


接下来安装索引库

    1.创建索引库,将solr解压目录下的/example/solr拷贝到索引库中

创建一个目录作为索引库
将解压文件中的solrCore拷贝到创建的目录

    2.在solr的服务中配置索引库

在solr的服务中配置索引库(即服务器容器中)
配置信息

    3.测试访问

测试访问

三、Solr管理界面介绍

    Dashboard:仪表盘,访问http://solr服务器Ip:端口/solr服务主目录,可以看到

主界面
仪表盘

    Logging:日志,显示solr运行出现的异常或错误、警告等各种信息

Logging

    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)

Core    Admin

    Java    Properties:可以查看到java相关的一些属性的信息

Java    Properties

    Thread  Dump:查看每个线程的详细信息,以及状态信息

Thread  Dump

Core Selecter(core选择器):选择solrCore

Core Selecter

    Overview:包含基本统计如当前文档数;和实例信息如当前核心的配置目录

Overview

    Analysis:检验分词效果

Analysis

    Documents :(索引文档)索引的相关操作,如:增加,修改,删除等

        在如下页面,选择/update ,文档格式选择 json ,然后 submit 提交。这样 索引就增 加上了。修改与增加一样,都是/update ,删除为/delete 。 成功之后,我们去 query 里查询数据 就能查到我们刚添加的数据.

Documents 

    Files:solr_home 下的 core 下的 conf 下的相关文件,可单击查看里面的内容

Files

    Ping:查看当前核心库还是否工作的以及响应时间

Ping

Plugins /stats:Solr 自带的一些插件以及我们安装的插件的信息以及统计

Plugins /stats

    Query:查询的结果要显示哪个字段,就得将schema.xml 文件配置字段时的 stored 属性设为true

Query

    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 功能

Replication

    Schema:展示该 Core 的shema.xml 文件中的内容

Schema

三、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

        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的依赖

pom.xml

        2.编写测试类,创建solrj的连接对象,创建solr的文档对象,将文档添加到solr的索引库中

编写测试

        3.提交事务,查看solrCore

查看结果

    通过SolrJ查询索引库中的文档

        1.创建solrj的连接对象

        2.创建查询条件

        3.设置分页条件

        4.执行查询,获取查询结果

测试类

        5.遍历结果,执行测试

结果

    通过SolrJ删除索引库中的文档

        1.编写测试类,创建连接对象

        2.设置删除格式

代码

        3.事务提交,查看solrCore

Solr索引库结果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容