写在前面:特别推荐Solr的官方入门文档的三个部分,基本上手的部分都讲到了,从基础的查询到词组查询,再到导入数据。特别全面,而且官方文档也指出,此文档是学习Solr的最佳途径。我本人也是在实践中许多问题都是依靠官方文档的指引才解决的。
一、安装
第一种方式:直接下载官方安装包、解压即可
第二种方式(Mac下brew命令安装)
brew install solr
使用brew默认的安装路径在
/usr/local/Cellar/solr/
二、启动
进入solr安装目录下的bin文件夹
cd /usr/local/Cellar/solr/8.5.0/bin/
启动solr
brew services start solr
或者
./solr start -h localhost -p 8983
如果出现happy searching则代表启动成功,访问localhost:8983,出现下图代表成功
三、创建自定义core
官方提供了几个例子,不需要创建core,如果实际引用中则需要我们自己创建自定义的core。
依旧在solr安装目录的bin文件夹下myCore,-c参数代表创建的core
./solr create_core -c myCore
创建成功之后,刷新一下控制台,发现多了一个core
可以看到默认的存储位置,进入myCore的文件夹下,有两个文件夹conf、data和一个core.properties文件,其中conf文件夹下有两个比较重要的文件solrconfig.xml和managed-schema
1、在manager-scheme中配置对应的实体字段如下:
<field name="name" type="string" indexed="true" stored="true"/>
<field name="age" type="plong" indexed="true" stored="true"/>
2、也可以在控制台->myCore->scheme->点击add Field添加
3、还可以通过curl命令添加
提示:关于field的定义、类型说明直接参考定义Field部分
四、向solr中插入数据
1、通过控制台->Documents->将要插入的数据以json格式放到Documents输入框中->点击submit,即可插入数据
2、通过curl命令,插入两条数据,注意这里要加上commit=true,否则solr是不会提交的
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/customData/update?commit=true' --data-binary '[{"userId":"234232231","name":"dijaa","age":189},{"userId":"378777","name":"oop","age":78}]'
更多关于JSON通过curl插入的例子,见官方文档Uploading Data 部分
五、查询
1、点击控制台的Query即可查出刚才的插入的数据
2、通过curl命令,其中customData是另一个自定义的core
curl "http://localhost:8983/solr/customData/select?q=*:*"
更多solr控制台查询或者命令查询参考查询部分
说明:默认solr会有一个唯一键id,并且是string类型的,默认是数字+数字组成,如:"783723823hhh-2323b23-9"这种。实际业务场景中,基本都会采用分布式ID,基本以Long类型为主,并且每一个实体类的唯一键不一定都是叫id,只需要更改managed-schema文件中的uniqueKey即可,然后重新添加一个新的Field即可,但是solr建议使用string类型来存储唯一键,可以直接把业务的Long类型主键转为string存储即可。
六、删除数据
1、控制台删除
Documents->update->选择XML->执行如下命令删除全部数据
<delete><query>*:*</query></delete>
<commit/>
(如果只想删除特定的数据,把查询条件放到<query>标签之间即可)如:删除userId为38237239392的数据
<delete><query>userId:38237239392</query></delete>
<commit/>
2、curl删除,同样要注意加上commit=true参数,这里的{"delete":"solr里的唯一键"},更多关于JSON数据的操作详见curl更新、插入、删除JSON数据
curl -X -POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/customData/update?commit=true' --data-binary '{"delete":"234232231"}'
七、删除core,-c 后面的参数是core的名字
solr delete -c myCore
八、停止slor、重启solr
solr stop
solr restart
提示:
当不清楚solr有哪些命令、或者具体命令如何使用,可以进入solr的安装目录下的bin目录,
更多slor命令的帮助可以直接使用(./solr command(具体的命令,不加具体命令则是查看支持的所有命令) -help)
如下所示:
九、可能遇到的问题
Error Processing the request.CoreContainer is either not initialize
我们实际开发过程中,增加core的时候,一般都是从现有的solr核心中拷贝配置文件,进行修改。一般修改manage-schema文件中的<field>和solrConfig.xml中的<dataDir>和其他一些配置。如果,修改之后,重启solr报这个错。那是因为你忘记改了另外一个core.properties文件。默认的core.properties文件中有这么一项
name=你的core名字
这里如果你copy现有的文件,并且忘记改了你自己新的core的名字,就会在启动的时候报这个错误.