使用Solr的后台管理界面来维护索引库。在Solr的后台管理界面中有很多东西都是可以操作的,暂且先不需要全部掌握,但是对于索引库的增删改查这你总得掌握吧!

使用Solr的后台管理界面管理索引库

在这一节中,我们的学习目标是学会Solr后台对索引库中的数据进行增、删、改、查等操作。

添加文档

添加文档这一操作可以一分为二来看,一是添加单个文档,一是批量导入数据。添加单个文档倒是容易操作,但批量导入数据操作起来就比较麻烦了,这也没事,因为下面我会详细介绍到。

添加单个文档

如何在Solr的后台管理界面中添加单个文档呢?其实,前面我就已经讲过了,在这里我还是重新讲一遍,你可得仔细看哟!
要想在Solr的后台管理界面中添加单个文档,那么你可以按照如下图所示填写的内容来操作。
使用Solr的后台管理界面管理索引库 - 图1
可以看到点击Submit Document按钮后,返回状态为success,这就说明已成功添加单个文档。要是你不信的话,可以查询一下索引库,你一定会查看到刚刚添加的那个文档。
使用Solr的后台管理界面管理索引库 - 图2

批量导入数据

现在我们有这样一个需求,在MySQL数据库服务器中有一个名为lucene的数据库,库中有一个products表,表中有3803条数据,请问如何将这3803条数据导入到Solr索引库中去呢?
使用Solr的后台管理界面管理索引库 - 图3
这里给出答案,即使用dataimport插件批量导入数据,详细步骤如下:

  • 第一步:把dataimport插件依赖的jar包添加到Solr Core(即core001\lib目录,若没有lib目录则自行创建)中。你不仅想问,dataimport插件依赖的jar包在哪儿呢?它们位于solr-8.7.0\dist目录下,如下图所示。
    使用Solr的后台管理界面管理索引库 - 图4
    除此之外,还要将MySQL数据库驱动jar包添加到Solr Core(即core001\lib目录)中,因为导入的数据来自于MySQL数据库,所以还得连接它。如此一来,Solr Core(即core001\lib目录)中便有如下三个jar包了。image.png

特别提醒,一定要在**solrconfig.xml 文件中,配置刚刚拷贝过去的jar包路径。**

  1. <lib dir="E:/solr/solrHome/core001/lib" regex="solr-dataimporthandler-.*\.jar" />
  2. <lib dir="E:/solr/solrHome/core001/lib" regex="mysql-connector-java-.*\.jar" />
  • 第二步:配置solrconfig.xml文件,在其中添加一个requestHandler(即请求处理器)。还记得咱们在查询文档时,见到的一个名为/select的requestHandler吗?使用Solr的后台管理界面管理索引库 - 图6它对应的就是solrconfig.xml核心配置文件中如下的一个requestHandler。

    1. <requestHandler name="/select" class="solr.SearchHandler">
    2. <lst name="defaults">
    3. <str name="echoParams">explicit</str>
    4. <int name="rows">10</int>
    5. </lst>
    6. </requestHandler>
  • 同理,现在咱们得在solrconfig.xml核心配置文件中添加一个如下的requestHandler。使用Solr的后台管理界面管理索引库 - 图7

  1. <queryResponseWriter name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  2. <lst name="defaults">
  3. <str name="config">data-config.xml</str>
  4. </lst>
  5. </queryResponseWriter>
  • 第三步:创建一个data-config.xml配置文件,并保存到collection1\conf目录下。其内容如下所示:
    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <dataConfig>
    3. <dataSource type="JdbcDataSource"
    4. driver="com.mysql.cj.jdbc.Driver"
    5. url="jdbc:mysql://localhost:3306/demo_1?serverTimezone=GMT%2B8"
    6. user="root"
    7. password="root"/>
    8. <document>
    9. <entity name="product" query="select id,title,conment from solr_data">
    10. <!-- column对应以上SQL语句查询出来的结果表中的列名,
    11. name为对应的域名(若在managed-schema配置文件中没有的话,则需要自行配置,即设置业务系统域),
    12. 它俩之间是映射关系 -->
    13. <field column="id" name="id"/>
    14. <field column="title" name="title"/>
    15. <field column="conment" name="conment"/>
    16. </entity>
    17. </document>
    18. </dataConfig>

特别提醒,数据库地址可能需要加上时区 **?serverTimezone=GMT%2B8**

  • 第四步:设置业务系统field。走完上面第三步的步骤,你会发现product_name、product_catalog_name······这些域并不存在于managed-schema配置文件中,所以,我们需要自己设置业务系统field。
    如果要是想不使用Solr提供的field,那么就可以针对具体的业务需要自定义一套field,如下是商品信息field。使用Solr的后台管理界面管理索引库 - 图8
    从上面的配置中可以看出,咱们定义好了一个名为product_keywords的复制域,其作用就是将product_name(商品名称)域和product_description(商品描述)域中的内容复制到一个域中去,以后根据关键字进行搜索的时候,只须搜索复制域就OK了,这有点类似于商品名字和商品描述的组合查询。
  • 第五步:重启Tomcat服务器,然后进入Solr的后台管理界面,接着按照如下图所示填写的内容来操作。使用Solr的后台管理界面管理索引库 - 图9为了验证是不是成功批量导入了数据,我们可以查询一下索引库。使用Solr的后台管理界面管理索引库 - 图10
    从上图可以发现查询出来的文档数是3803,说明批量导入数据成功了!!!

    更新文档

    要想在Solr的后台管理界面中更新文档,那么你可以按照如下图所示填写的内容来操作。
    使用Solr的后台管理界面管理索引库 - 图11
    更新文档实际上是先删掉原来的文档再添加一个新的,注意更新文档时id域一定要相同。点击Submit Document按钮后,你将会看到返回状态为success,这就说明已成功更新了文档。要是你不信的话,可以查询一下索引库,你一定会查看到那个更新之后的文档。
    使用Solr的后台管理界面管理索引库 - 图12

    删除文档

    删除文档需要分三种情况来讨论,第一种情况是根据id来删除,第二种情况是根据指定条件来删除,第三种情况是删除所有。下面我会详细地介绍这三种情况。

    根据id删除

    例如,删除id为”a0001”的文档,你就需要按照如下图所示填写的内容来操作了。
    使用Solr的后台管理界面管理索引库 - 图13
    从上图中可以看到向Solr服务器发送的XML格式的数据如下:
    1. <delete>
    2. <id>a001</id>
    3. </delete>
    4. <commit/>
    在老版本的Solr中,<commit/>是一定得要写上的,不然无法删除指定id的文档。但经过我的验证,发现在Apache Solr 8.7.0这个版本中,<commit/>是可以不用写的,因为会自动提交(Commit Within),勿须我们手动提交。

    根据指定条件删除

    例如,删除name为”liayun”的文档,你就需要按照如下图所示填写的内容来操作了。
    使用Solr的后台管理界面管理索引库 - 图14
    从上图中可以看到向Solr服务器发送的XML格式的数据如下:
    1. <delete>
    2. <query>name:liayun</query>
    3. </delete>
    4. <commit/>

    删除所有

    例如,删除所有索引数据,你就需要按照如下图所示填写的内容来操作了。
    使用Solr的后台管理界面管理索引库 - 图15
    从上图中可以看到向Solr服务器发送的XML格式的数据如下:
    1. <delete>
    2. <query>*:*</query>
    3. </delete>
    4. <commit/>

    查询文档

    使用Solr的后台管理界面来查询文档时,Solr制定了一些参数用以完成不同需求下的搜索。下面,我会一一介绍这些参数。

    q

    在该参数处填写的是查询字符串,可理解为根据关键字查询的关键字,而且是必填项。若查询所有则是*:*;若想查询出商品名称中包含”幸福”的商品信息,则在该参数处填写的就应是product_name:幸福
    使用Solr的后台管理界面管理索引库 - 图16
    从上图中可以清楚地看到一共查询出来了7条相关信息。
    如果想查询出商品名称中包含”幸福”,同时又是”环保餐具”类别下的商品信息,那么在该参数处填写的就应是product_name:幸福 AND product_catalog_name:环保餐具
    使用Solr的后台管理界面管理索引库 - 图17
    但很可惜,这样写虽然也能查询出来,但是Solr不推荐这么使用。那么你不仅就要问了,Solr到底推荐的是哪种写法呢?这就不得不学习下面这个参数了。

    fq

    在该参数处填写的是查询过滤器,其作用是在q查询符合结果中过滤出同时符合fq查询的结果。如果想查询出商品名称中包含”幸福”,同时又是”环保餐具”类别下的商品信息,那么你可以按照下图所示填写的内容来操作。
    使用Solr的后台管理界面管理索引库 - 图18
    这里,我还会多举几个例子,就是要让咱们多熟悉熟悉这个参数。如果想要查询出商品价格在10元(包括10元)以下,同时又是”环保餐具”类别下的商品信息,那么你就应该按照下图所示填写的内容来操作了。
    使用Solr的后台管理界面管理索引库 - 图19
    如果想要查询出商品价格在10元(包括10元)以上,同时又是”环保餐具”类别下的商品信息,那么这时你会不会自己进行查询了呢?
    使用Solr的后台管理界面管理索引库 - 图20
    若是想要查询出商品价格在10元(不包括10元)以上,同时又是”环保餐具”类别下的商品信息,则又应该怎样查询呢?现在,你总该会了吧!
    使用Solr的后台管理界面管理索引库 - 图21

    sort

    在该参数处填写的是排序规则,格式是域名 desc|asc。例如,如果想要查询商品价格在10元(不包括10元)以上,同时又在”环保餐具”类别下,并且按价格降序排序的商品信息,那么你就应该按照下图所示填写的内容来操作了。
    使用Solr的后台管理界面管理索引库 - 图22
    从上图可以看出查询出来了99条商品记录,而且还是按照价格降序进行了排列。
    如果想要查询商品价格在10元(不包括10元)以上,同时又在”环保餐具”类别下,并且按价格升序排序的商品信息,那么这时你会不会自己进行查询了呢?
    使用Solr的后台管理界面管理索引库 - 图23
    从上图也能看出查询出来了99条商品记录,不同的一点是按照价格升序进行了排列。

    start与rows

    这两参数分页显示时使用。start参数指定的是开始记录下标,从0开始;rows参数指定的是返回结果最多有多少条记录,配合start参数来实现分页。
    大家可以按照下图所示填写的内容来进行分页查询,其实还是蛮简单的。
    使用Solr的后台管理界面管理索引库 - 图24
    从上图的查询结果中可以看到,查询的开始记录下标为3,并且每次只查出了三条数据,这就是所谓的分页查询。

    fl

    该参数指定返回那些field,用逗号或空格分隔多个field。要是按照下图所示填写的内容来进行分页查询,那么你会看到查询结果中一一列出了商品id、商品名称、商品价格、商品分类名称以及商品图片等field。
    使用Solr的后台管理界面管理索引库 - 图25
    我们嫌列出的field太多了,能不能只列出商品id和商品名称这两个field呢?可以,只须在fl参数处填写id,product_name即可,就像下图所示那样。
    使用Solr的后台管理界面管理索引库 - 图26

    df

    该参数指定默认查询的field,如果在该参数处指定了默认查询的field,那么在查询字符串q里面就可以直接写查询关键字了。例如,大家可以试着按照下图所示填写的内容来进行查询。
    使用Solr的后台管理界面管理索引库 - 图27

    wt

    该参数指定查询结果的输出格式,前面我们都是用的json格式,其实还要很多输出格式可供我们选择,比如xml、php、ruby、python等输出格式。这里,我会试着用xml格式输出一下(其实在实际开发并不会这样子做)。
    使用Solr的后台管理界面管理索引库 - 图28

    hl

    该参数指定是否高亮,如果有高亮的需求的话,那么需要还需要指定好如下参数。
    使用Solr的后台管理界面管理索引库 - 图29
    如果显示商品名称需要高亮,那么大家可以试着按照下图所示填写的内容来操作。
    使用Solr的后台管理界面管理索引库 - 图30
    温馨提示:其实最后我们在代码中实现高亮的时候,为了显眼会设置样式,比如颜色为红色,所以在代码中实现的时候就需要写成<em style='color:red>这个样子了!
    到这里,使用Solr的后台管理界面来管理索引库的讲解就结束了,祝大家阅读愉快!!!