搜索技术 Solr 入门详解

一、介绍

企业站内搜索技术选型

在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。

1. 单独使用Lucene实现

单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用

2. 使用Google或Baidu接口

通过第三方搜索引擎提供的接口实现站内搜索,这样和第三方引擎系统依赖紧密,不方便扩展,不建议采用

3. 使用Solr实现

基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。

什么是Solr

Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化

Solr可以独立运行,运行在 Jetty、Tomcat 等这些 Servlet 容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回 Xml、json 等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。

Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service的API 接口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果

Solr类似 webservice,调用接口,实现增加,修改,删除,查询索引库。

solr特性
  • 高级的全文搜索功能
  • 专为高通量的网络流量进行的优化
  • 基于开放接口(xml和http)的标准
  • 综合的html管理界面
  • 可伸缩性-能够有效地复制到另外一个Solr搜索服务器
  • 使用xml配置达到灵活性和适配性
  • 可扩展的插件体系

Solr与Lucene的区别

Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。

Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。

Solr 类似 webservice,提供接口,调用接口,发送一些特点语句,实现增加,删除,修改,查询。

二、solr 安装(mac)

  1. 首先安装 jdk 和 jre
  2. 安装solr:brew install solr安装solr,可以通过brew edit solr修改要安装的版本
  3. 启动 solr:solr start
    • 默认端口号8083,如果该端口被占用,则会自动切换可用的端口。
      solr start
    • 启动成功后再浏览器输入URLhttp://127.0.0.1:8983,访问 solr 后台管理界面
      浏览器效果
  4. 创建 core(可以理解为mysql中的数据库,即一个服务可以有多个库):solr create -c test_core
    创建成功的 core
  5. 测试分词


    测试分词

由于solr自带的分词器无法将中文根据语义分词,需要引入中文分词器 IKAnalyzer

三、IKAnalyzer 安装

下载地址:https://github.com/jxlwqq/Installing-Solr-and-indexing-MySQL-on-macOS/tree/master/file

1. 下载必要的组件

  • IKAnalyzer jar 包: ik-analyzer-solr5-5.x.jar
  • IKAnalyzer 配置文件: IKAnalyzer.cfg.xml
  • 词库: mydict.dic 和 stopword.dic

下载后,将相关文件复制到相应的目录中,操作目录如下:

cp ik-analyzer-solr5-5.x.jar /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/ 
mkdir /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/

cp IKAnalyzer.cfg.xml /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
cp mydict.dic /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
cp stopword.dic /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/

2. 修改 managed-schema 文件

// test_core 仓库下
vi /usr/local/Cellar/solr/7.3.1/server/solr/test_core/conf/managed-schema

schema标签内追加以下内容:

<fieldType name="text_ik" class="solr.TextField">
    <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="text_ik" type="text_ik" indexed="true" stored="true" multiValued="false"/>

3. 重启测试

进行重启:solr restart
进行测试:刷新页面,进入到 test_core 仓库下

测试页面2

测试成功!

四、solr 常用命令

  1. 其他命令
查看版本:solr -version
重启:solr -version
关闭:solr stop -all(或者指定端口号:solr stop -p 8983)
创建集合:solr create -c [集合名称]
删除集合:solr delete -c [集合名称]

删除数据

<delete>
    <query>*:*</query>
</delete>
<commit/> 
solr 删除数据

删除字段

{
    "delete-field" : {
        "name" : "字段名称"
    },
    "delete-field" : {
        "name" : "字段名称"
    }
}

提交的地址

POST    http://localhost:8983/solr/集合名称/schema

添加字段

name: 字段名称
type: 字段类型
stored: 是否保存
indexed: 是否索引

{
    "add-field" : {
        "name" : "字段名称",
        "type" : "text_ik",
        "stored" : "true",
        "indexed" : "true"
    },
    "add-field" : {
        "name" : "字段名称",
        "type" : "text_ik",
        "stored" : "true"
    }
}

提交地址

POST    http://localhost:8983/solr/集合名称/schema

还可以在管理员界面添加


solr 管理页面添加字段

参考资料

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

推荐阅读更多精彩内容