基于solr7.4入门学习一【solr的基本概念和用法、以及如何下载运行solr,配置中文分词器等】

本教程用于记录solr入门路上的一些爬坑的方法,毕竟好记性不如烂笔头。

问题一:什么是Solr?

Solr是基于lucene的企业级全文检索、搜索引擎框架。

运行流程:对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定参数的POST,生成索引;也可以通过HttpGet操作提出查找请求,并得到返回结果。这部分后面将会进行详细学习。

Lucene:是一个开放源代码的全文检索引擎工具包。

问题二:solr能做什么?

全文检索。也就是网站应用中的搜索功能
例如:我们在京东搜索java


在这里插入图片描述

在这里插入图片描述

在结果集中就能看到包含关键字java的商品,并且java被高亮显示。
再比如百度上搜索一段文字:
在这里插入图片描述

同样会根据你输入的关键字匹配N多结果集,并根据一定的顺序排列起来

问题三:solr是怎么做到的?

简单理解:查新华字典,不会查的人,一页一页的翻。而一般人都是根据汉字的拼音索引或者偏旁笔画索引经行查询。solr中首先将需要建立检索的数据导入到solr服务器中,并在solr服务器中建立基于表字段的field,也就是。这一步相当于把数据库的数据缓存到redis中。
当输入字符进行检索时,字符经过分词器,被拆分成不同的词组,solr将分别检索这些词组在服务器字典中的位置编号。比如搜索:Lucene solr hadoop,如图:

在这里插入图片描述

搜先将Lucene solr hadoop分词成 Lucene、solr、hadoop最后取交集后最匹配的就是位置编号为3的数据。而真实的分词往往复杂的多,在英文中需要将部分单词的过去式、复数形式、动词形式、名词形式等转换成一个标准形式,同时将定冠词a、an、the等去掉等等。而中文分词时候,某些特定的词组不需要拆分,比如网络词:高富帅、屌丝、骚猪等作为一个词组去进行检索,像:我、的、是等直接过滤掉。

问题四:怎么使用?

1.首先下载对应版本的solr:http://archive.apache.org/dist/lucene/solr/

早期的solr版本[solr4.x]下载的文件解压后会有一个war包,可以将此war包放在tomcat里运行。cas6.x和cas7.x取消了war包,但提供了丰富的脚本文件。下载完毕解压到电脑上:


在这里插入图片描述

Tips:用到的目录只有server,bin目录下是启动项目的脚本,api说明在docs中的index.html,example下有一些demo,但是不够具体。

2.启动solr
在bin目录下启动cmd,输入solr start -p 8088:

在这里插入图片描述

发现会出现一个文件找不到的异常,但是项目已经启动成功了:
在这里插入图片描述

作为强迫症患者,虽然不影响solr的运行,但每次启动出现这样的报错还是不能忍受,并且这个是log4j的文件找不到,会直接导致看不到运行日志,对于后面学习十分友好。

异常解决方法:
打开bin/solr.cmd,将file:全部替换成file:///


在这里插入图片描述

感谢这位老哥提供的方法:https://blog.csdn.net/yqwang75457/article/details/82805008

替换完毕后,在刚才启动的cmd,输入 solr stop -p 8088或者solr stop -all,关闭刚才启动的solr。
然后重新打开一个cmd,输入:solr start -p 8088,注意加-p 端口号代表以指定端口启动,不加-p参数代表以默认的8983端口启动,stop的时候则代表停止指定端口号的solr。
重启启动后:

在这里插入图片描述

这次,不加-p参数则就代表了以默认的端口号8983启动,并且启动异常也没有出现了。
进入solr管理主页:http://127.0.0.1:8983/solr/#/
在这里插入图片描述

发现,提示没有core,让我们去创建,在solr4.x的时候,叫做collection,现在这个版本叫core。core/collection这个东西根据我的理解:相当于工作空间、orcl的用户空间。在一个指定的core/collection中去配置分词器配置、数据库配置、filed的配置等等。
点击红框后:

在这里插入图片描述

可以给core的各个文件一个自定义的名字,一般name和instanceDir保持一致,也就是core的名字和存放core的文件夹名字。
dataDir是保存导入到solr中的数据,用户将数据库的数据导入到solr后,solr在此目录下进行保存/建立词典等。
config很明显就是core的核心配置文件。
schema是用来存放索引的配置文件。比如:有一个商品表(goods,包含字段:name【商品名字】、desc【商品描述】),其中name和desc需要建立索引,因为当用户在应用网页中可能会搜索商品名字,也可能是相关商品的描述。这个时候solr就会根据搜索的内容分别在name和desc的索引里高效的筛选出商品的结果。
当然也可以在cmd窗口中通过输入:solr create -c core名字 进行创建:
在这里插入图片描述

此时,进入server/solr/就能看到生成的core文件夹了:
在这里插入图片描述

同时刷新 http://127.0.0.1:8983/solr/#/
在这里插入图片描述

core中出现了刚才创建的helloSolr
在这里插入图片描述

  • Analysis是分词测试
  • Dataimport是数据导入
  • Query可以模拟查询
  • Schema中可以看到创建的索引

中文分词

点击Analysis,输入任意内容尝试分词:


在这里插入图片描述

在没有添加Ik分词器时候,会把搜索内容打断成一个一个汉字书检索,这就十分的低效。因此需要添加中文分词器
1.下载ik分词器

推荐一个老哥贡献的分词器:http://www.cnblogs.com/liang1101/articles/6395016.html
下载地址:https://github.com/Siwash/rpf-solr-study
github也有很多可以选择

下载后将jar包放到solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib下,并在WEB-INF下创建classes文件用户存放ik分词器的配置文件:

在这里插入图片描述

配置文件下载地址:https://github.com/Siwash/rpf-solr-study

推荐直接下载,也可以自行创建无BOM格式的UTF-8的文件,IKAnalyzer.cfg.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
    <comment>IK Analyzer 扩展配置</comment>
     <entry key="ext_dict">/ext.dic;</entry>
     <entry key="ext_stopwords">/stopwords.dic</entry> 
</properties>

其中ext.dic是不需要分词的词组,stopwords.dic是要过滤出去的词组,格式如下:

高富帅
黑马程序员
电科
死肥宅
一个
我们
时间
中国

最后打开创建的core下的managed-schma.xml(solr-7.4.0\server\solr\helloSolr\conf)
在结尾处加入如下代码,让IK分词器生效:

<!--配置中文分词器-->
    <fieldType name="text_ik" class="solr.TextField">
        <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>
    <!--配置几个域,这几个就支持中文分词了,当然自己根据需求进行创建即可-->
    <field name="title_ik" type="text_ik" indexed="true" stored="true"/>
    <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>

最后重新启动测试运行效果:

在这里插入图片描述

可以发现死肥宅作为一个词组没有被拆分下来。

Tips若添加分词后出现如下问题,更换ik-Analysis的版本,我这个版本是兼容solr7.x的
看异常信息应该是solr7修改了某些方法名或者取消了某些方法导致分词器出现bug

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

推荐阅读更多精彩内容