solr下载
sorl官网下载地址:https://solr.apache.org/downloads.html
我们下载7.7.3的windows版本
solr启动
压缩包解压后得到以下目录文档
我们打开bin文件夹,在地址栏中输入cmd,进入命令行界面。接着输入启动命令。
启动命令如下:
solr.cmd start
在浏览器中访问http://localhost:8983/
进入solr可视化界面。
至此,solr启动成功。
solr基本操作
新建core(索引库)
按照图示操作以后,会报错。提示确实必要的配置文件。
其实solr已经在文件夹里给我们提供了默认的配置信息。我们打开solr-7.7.3\server\solr
目录,可以看到这下面有2个文件夹,一个是我们刚刚创建的new_core
索引库,一个是configsets
配置设置。configsets
这里面就存放着默认的配置信息。我们把solr-7.7.3\server\solr\configsets\_default
下的conf整体复制到new_core
里,再次点击Add Core
,这次新增索引库成功。
进入我们刚刚创建的索引库,可以看到左侧有一列菜单,常用功能如上图所示。下面就通过上面这些常用功能,我们对solr做一些基本操作。
新增索引
在Documents
通过发送json格式的数据可以新增索引。
修改索引
在Documents
通过发送json格式的数据,数据中ID为需要修改索引的ID值,可以修改索引。
查询索引
新增修改后的索引在Query
中点击Execute Query
可以查询。
删除索引
在Documents
通过发送XML格式的数据可以通过条件删除索引。
<delete>
<query> id:"1"</query>
</delete>
<commit/>
删除全部索引
<delete><query>*:*</query></delete>
<commit/>
设置索引字段
细心的小伙伴应该已经发现了,新增的索引在查询的时候,age和name的数据类型并不像id一样是字符串类型。
按照正常的数据库逻辑,创建库表以后应该新增字段,然后才能存储数据。那为啥solr不需要设置字段就可以新增索引数据呢?其实solr在新增索引数据之前,已经默认新增了我们json中插入的字段。在solr-7.7.3\server\solr\new_core\conf
中的managed-schema
配置文件中可以找到新增的字段。
我们参照id的设置,来设置age和name的字段设置。日常使用中,我们会根据实际需要来设置索引字段。设置完成后,需要重启solr来保证配置生效。
在managed-schema
中可以设置主键字段
<uniqueKey>id</uniqueKey>
设置完成后,重新插入索引数据,查询后可以看到索引数据的格式已经变更为字符串。
设置solr时区
我们可以在solr-7.7.3\server\logs
文件夹中看到solr的日志信息,查询启动日志可以发现solr的日志打印时间比正常的时间少8小时,这是因为solr默认的时区不是东八区造成的,我们可以在solr启动配置文件中修改solr默认时区,这个很重要,在solr自动更新索引中时间是重要的参数。
在solr-7.7.3\bin
中编辑启动文件solr.cmd
,在文件中搜索时区关键字UTC
可以找到时区设置代码
set SOLR_TIMEZONE=UTC
修改为
set SOLR_TIMEZONE=UTC+8
重启solr以后,我们再看日志,这时时间显示正常了。
中文分词设置
我们使用搜索引擎,有一个关键原因就是分词,利用搜索引擎的智能分词可以使搜索结果更智能化,更贴近用户的意愿。在solr的可视化界面中也提供了分词的模拟。
我们在输入框中输入分词测试
,选择任意text
开头的分词器,进行分词测试,得到如下结果。
明显这不符合汉字的分词习惯,所以我们需要引入中文分词器ik-analyzer
。安装ik-analyzer
分词器,首先需要下载架包。ik-analyzer
分词器架包下载地址如下:
https://search.maven.org/search?q=com.github.magese
点击下载jar包。下载完成后把架包放到solr-7.7.3\server\solr-webapp\webapp\WEB-INF\lib
下。接下来需要在solr-7.7.3\server\solr\new_core\conf\managed-schema
中设置ik-analyzer
分词器的使用。配置如下:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
设置完成以后重启solr,再使用分词测试,选择text_ik
做为分词器,此时我们发现分词后的结果已经符合中文的分词习惯了。