进入Solr后台页面,选择一个核,点击Documents
,进入Document
管理标签:
一、添加Document
在Solr初探(2)——域管理中我们已经说过了,id是一个Document必须要包含的field,让我们新建一个Document
,类型为JSON
:
{
"id" : 1,
"name" : "jitwxs"
}
在查询页中点击Execute Query
进行查询,就能看见我们添加的这个Doucment
了:
二、更新Document
修改一个Document
十分简单,只需要指定id
,Solr就会先删除id为指定id的Document
,然后将我们输入的Document
保存起来,达到更新的目的(内部实现是先删后添)。
当我们输入:
{
"id" : 1,
"author":"jitwxs",
"content" : "哇哈哈哈"
}
重新查询:
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*",
"indent":"on",
"wt":"json",
"_":"1523349939964"}},
"response":{"numFound":1,"start":0,"docs":[
{
"id":"1",
"author":"jitwxs",
"author_s":"jitwxs",
"content":["哇哈哈哈"],
"_version_":1597348563073892352}]
}}
三、删除Document
删除一个Document
比较特殊,使用JSON
无法实现,我们将Document
类型修改为XML
,将id为1的Document删除掉:
<delete>
<id>1</id>
</delete>
重新查询:
{
"responseHeader":{
"status":0,
"QTime":1,
"params":{
"q":"*:*",
"indent":"on",
"wt":"json",
"_":"1523349939964"}},
"response":{"numFound":0,"start":0,"docs":[]
}
除了上面哪种方法,还可以指定删除条件:
<delete>
<query>id:1</query>
</delete>
因为可以始用正则表达式,那么举一反三,删除所有Document,就是:
<delete>
<query>*:* </query>
</delete>
四、导入数据
注:数据库文件使用宜立方商城的数据库,点击这里下载sql文件。
Step1:导入依赖包
在core1
的目录下新建lib
文件夹(如果有,无需建立),从Solr源码包的dist文件夹中导入两个solr-dataimporthandler
包,以及一个mysql
驱动包。
Step2:创建导入数据的Handler
编辑core1/conf
目录下的solrconfig.xml
文件,在文件末尾添加上对requestHander
的配置:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
Step3:配置data-config.xml
我们刚刚在requestHander
中指定了我们数据导入的配置文件,因此我们在solrconfig.xml
的同级目录下,即core1/conf
目录下新建data-config.xml
文件:
编辑文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<!-- 数据库信息 -->
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/e3mall"
user="root" password="root"/>
<document>
<!-- document实体 -->
<entity name="item" query="SELECT id,title,sell_point,price FROM tb_item">
<!-- 数据库字段映射solr字段 -->
<field column="id" name="id"/>
<field column="title" name="item_title"/>
<field column="sell_point" name="item_sell_point"/>
<field column="price" name="item_price"/>
</entity>
</document>
</dataConfig>
配置文件总共两个部分,第一个部分是数据库连接信息,第二个部分是在document
中建立了一个实体,参数一个是name,一个是sql查询语句,其内部对查询结果的每一项映射Solr的field
。
Step4:配置field
在上一步中,我们将查询结果的每一项映射到了Solr的filed
的上,但是除了id
是存在的以外,其他都不存在,因此我们需要手动添加。
编辑managed-schema
文件,在末尾新增相关的field,如果你理解了Solr初探(2)——域管理,这里的配置就很简单了。
解释:
(1)创建了item_title
、item_sell_point
、item_price
三个域,其中前两个类型为IK分词器的类型,第三个为int类型。
(2)创建了item_keywords
域,将item_title
、item_sell_point
拷贝到item_keywords
中,便于搜索。(因为需求是从商品标题或商品卖点中查找)
Step5:重启服务
重启服务,选择core1
的Dataimport
标签页,此时右边就已经有内容了。
解释:
(1)/dataimport
第二步requestHandler
中起的名字。
(2)clean
每次导入前,清空Document。
(3)Entity
第三步data-config.xml
中配置的entity
。
当我们点击Execute按钮后,过一会右边会提示索引创建成功,如下所示:
点击Query
标签页,查询后可以看到数据已经被导入了:
五、查询Document
之前一直是用*.*
查询所有,下面详细介绍下查询: