Apache Solr
简介
Solr是Apache的顶级开源项目,使用java开发 ,基于Lucene的全文检索服务器。 Solr比Lucene提供了更多的查询语句,而且它可扩展、可配置,同时它对Lucene的性能进行了优化。
安装
- 下载 : 下载地址
- 解压 :
tar -zxvf solr-9.3.0.tgz -C .
- 修改solr启动参数,取消健康检查,否则启动会报警告
cd /opt/solr/solr-9.3.0/bin/
vim solr.in.sh
- 修改内容
SOLR_ULIMIT_CHECKS=false
启动
solr不推荐使用root账户启动,这点与es也相同,当然可以直接用-force
参数,强制启动
./solr start -force
如果需要修改端口,可以通过-p
参数指定
./solr start -p 8089 -force
启动成功可以看到日志打印
➜ bin ./solr start -force
Waiting up to 180 seconds to see Solr running on port 8983 [|]
Started Solr server on port 8983 (pid=3786). Happy searching!
➜ bin
访问服务器ip:8983,可查看到solr管理界面
http://localhost:8983/solr/#/
主要概念
core
doc
Schema
分词
倒排索引
创建Core
PS D:\Apache\solr-9.3.0\solr-9.3.0\bin> .\solr.cmd create -c core_test1
WARNING: Using _default configset with data driven schema functionality. NOT RECOMMENDED for production use.
To turn off: bin\solr config -c core_test1 -p 8983 -action set-user-property -property update.autoCreateFields -value false
Created new core 'core_test1'
PS D:\Apache\solr-9.3.0\solr-9.3.0\bin>
配置solr字段
添加字段有2种方法,可以通过web页面添加,也可以直接修改schema文件添加。
属性 | 说明 | 取值 | 默认值 |
---|---|---|---|
stored | 是否存储,一个字段是否被存储,取决于你是否想在solr的查询结果中得到它,也就是说你是否想在查询结果中看到它,它将会消耗cpu和io和磁盘空间等资源。 | true/false | true |
indexed | 字段是否创建索引,索引的字段是在搜索的时候可以用它来查询或排序,在lucene中,被索引的字段将会建立倒排表。 | true/false | true |
uninvertible | 如果为 true,则表示一个 indexed=“true” docValues=“false” 字段在查询时可以用“un-inverted”构建大内存数据结构以代替 DocValues。 出于历史原因,默认为 true,但强烈建议用户将其设置 false 以保持稳定性,并据需要使用 docValues=“true”。 | true/false | true |
docValues | 字段的值是否放在面向列的 DocValues 结构中 | true/false | false |
multiValued | 设置为true表示此字段可以存储多个值,意思是这个字段在一个文档中可以存储多个值的内容。 | true/false | false |
required | 是否必须。如果为 true,则 Solr 拒绝任何添加没有此字段的文档。 | true/false | false |
default | 字段的默认值,经常用在字段是必须的,但是有时候又无法提供的情况,solr就会用默认值替代。如: <field name="recordTime" type="date" indexed="true" stored="true" required="true" default="NOW+8HOUR"/> 标示recordTime如果没有提供,用当前的时间+8个小时作为recordTime的时间,加8小时是因为solr默认时区是0时区,按照中国北京时间(东8区)算,需要加上8个小时。 |
修改managed-schema
在core的conf下的managed-schema文件中增加字段配置
<!-- 自定义的字段,id已经存在不需要设置 -->
<field name="dd" type="string" indexed="true" stored="true"/>
<field name="age" type="pint" indexed="true" stored="true" />
<field name="description" type="text_ik" indexed="true" stored="true" />
<field name="createTime" type="pdate" indexed="true" stored="true" />
<field name="updateTime" type="pdate" indexed="true" stored="true" />
添加后到“Core Admin”中刷新一下核即可
添加数据
现在core已经建好了,但是里面还没有数据,这里我们使用json添加以便快速演示(支持 JSON,、CSV、XML等格式),一般生产环境下都是从数据库访问。
准备json数据:
{"id": "11","age": 40,"name": "李白","description": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"},
{"id": "12","age": 31,"name": "杜甫","description": "唐代伟大的现实主义文学作家,唐诗思想艺术的集大成者"}
找到该core的Documents菜单,选择文档类型未JSON,把刚才准备的数据粘贴进来,确认无误提交
查询
现在验证一下查询一下
安装中文分词器
下载地址
将ik-analyzer-8.5.0.jar放入solr目录下
存放于 *solr-9.1.0\server\solr-webapp\webapp\WEB-INF\lib* 目录下
编辑 D:\Apache\solr-9.3.0\solr-9.3.0\server\solr\core_test1\conf\managed-schema.xml
查询
到core的分词菜单中验证一下description字段是否按中文分词了,可以看到一件按照中文的分词习惯进行了分词。