Solr初探(4)——后台数据导入及Document的增删改查

进入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_titleitem_sell_pointitem_price三个域,其中前两个类型为IK分词器的类型,第三个为int类型。

(2)创建了item_keywords域,将item_titleitem_sell_point拷贝到item_keywords中,便于搜索。(因为需求是从商品标题或商品卖点中查找)

Step5:重启服务

重启服务,选择core1Dataimport标签页,此时右边就已经有内容了。

解释:

(1)/dataimport

第二步requestHandler中起的名字。

(2)clean

每次导入前,清空Document。

(3)Entity

第三步data-config.xml中配置的entity

当我们点击Execute按钮后,过一会右边会提示索引创建成功,如下所示:

点击Query标签页,查询后可以看到数据已经被导入了:


五、查询Document

之前一直是用*.*查询所有,下面详细介绍下查询:

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值