使用Solr的后台管理界面来维护索引库。在Solr的后台管理界面中有很多东西都是可以操作的,暂且先不需要全部掌握,但是对于索引库的增删改查这你总得掌握吧!
使用Solr的后台管理界面管理索引库
在这一节中,我们的学习目标是学会Solr后台对索引库中的数据进行增、删、改、查等操作。
添加文档
添加文档这一操作可以一分为二来看,一是添加单个文档,一是批量导入数据。添加单个文档倒是容易操作,但批量导入数据操作起来就比较麻烦了,这也没事,因为下面我会详细介绍到。
添加单个文档
如何在Solr的后台管理界面中添加单个文档呢?其实,前面我就已经讲过了,在这里我还是重新讲一遍,你可得仔细看哟!
要想在Solr的后台管理界面中添加单个文档,那么你可以按照如下图所示填写的内容来操作。
可以看到点击Submit Document按钮后,返回状态为success,这就说明已成功添加单个文档。要是你不信的话,可以查询一下索引库,你一定会查看到刚刚添加的那个文档。
批量导入数据
现在我们有这样一个需求,在MySQL数据库服务器中有一个名为lucene的数据库,库中有一个products表,表中有3803条数据,请问如何将这3803条数据导入到Solr索引库中去呢?
这里给出答案,即使用dataimport插件批量导入数据,详细步骤如下:
- 第一步:把dataimport插件依赖的jar包添加到Solr Core(即core001\lib目录,若没有lib目录则自行创建)中。你不仅想问,dataimport插件依赖的jar包在哪儿呢?它们位于solr-8.7.0\dist目录下,如下图所示。
除此之外,还要将MySQL数据库驱动jar包添加到Solr Core(即core001\lib目录)中,因为导入的数据来自于MySQL数据库,所以还得连接它。如此一来,Solr Core(即core001\lib目录)中便有如下三个jar包了。
特别提醒,一定要在**solrconfig.xml 文件中,配置刚刚拷贝过去的jar包路径。**
<lib dir="E:/solr/solrHome/core001/lib" regex="solr-dataimporthandler-.*\.jar" />
<lib dir="E:/solr/solrHome/core001/lib" regex="mysql-connector-java-.*\.jar" />
第二步:配置solrconfig.xml文件,在其中添加一个requestHandler(即请求处理器)。还记得咱们在查询文档时,见到的一个名为
/select
的requestHandler吗?它对应的就是solrconfig.xml核心配置文件中如下的一个requestHandler。
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
</lst>
</requestHandler>
同理,现在咱们得在solrconfig.xml核心配置文件中添加一个如下的requestHandler。
<queryResponseWriter name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</queryResponseWriter>
- 第三步:创建一个data-config.xml配置文件,并保存到collection1\conf目录下。其内容如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/demo_1?serverTimezone=GMT%2B8"
user="root"
password="root"/>
<document>
<entity name="product" query="select id,title,conment from solr_data">
<!-- column对应以上SQL语句查询出来的结果表中的列名,
name为对应的域名(若在managed-schema配置文件中没有的话,则需要自行配置,即设置业务系统域),
它俩之间是映射关系 -->
<field column="id" name="id"/>
<field column="title" name="title"/>
<field column="conment" name="conment"/>
</entity>
</document>
</dataConfig>
特别提醒,数据库地址可能需要加上时区 **?serverTimezone=GMT%2B8
**
- 第四步:设置业务系统field。走完上面第三步的步骤,你会发现product_name、product_catalog_name······这些域并不存在于managed-schema配置文件中,所以,我们需要自己设置业务系统field。
如果要是想不使用Solr提供的field,那么就可以针对具体的业务需要自定义一套field,如下是商品信息field。
从上面的配置中可以看出,咱们定义好了一个名为product_keywords的复制域,其作用就是将product_name(商品名称)域和product_description(商品描述)域中的内容复制到一个域中去,以后根据关键字进行搜索的时候,只须搜索复制域就OK了,这有点类似于商品名字和商品描述的组合查询。 - 第五步:重启Tomcat服务器,然后进入Solr的后台管理界面,接着按照如下图所示填写的内容来操作。
为了验证是不是成功批量导入了数据,我们可以查询一下索引库。
从上图可以发现查询出来的文档数是3803,说明批量导入数据成功了!!!
更新文档
要想在Solr的后台管理界面中更新文档,那么你可以按照如下图所示填写的内容来操作。
更新文档实际上是先删掉原来的文档再添加一个新的,注意更新文档时id域一定要相同。点击Submit Document按钮后,你将会看到返回状态为success,这就说明已成功更新了文档。要是你不信的话,可以查询一下索引库,你一定会查看到那个更新之后的文档。删除文档
删除文档需要分三种情况来讨论,第一种情况是根据id来删除,第二种情况是根据指定条件来删除,第三种情况是删除所有。下面我会详细地介绍这三种情况。根据id删除
例如,删除id为”a0001”的文档,你就需要按照如下图所示填写的内容来操作了。
从上图中可以看到向Solr服务器发送的XML格式的数据如下:
在老版本的Solr中,<delete>
<id>a001</id>
</delete>
<commit/>
<commit/>
是一定得要写上的,不然无法删除指定id的文档。但经过我的验证,发现在Apache Solr 8.7.0
这个版本中,<commit/>
是可以不用写的,因为会自动提交(Commit Within),勿须我们手动提交。根据指定条件删除
例如,删除name为”liayun”的文档,你就需要按照如下图所示填写的内容来操作了。
从上图中可以看到向Solr服务器发送的XML格式的数据如下:<delete>
<query>name:liayun</query>
</delete>
<commit/>
删除所有
例如,删除所有索引数据,你就需要按照如下图所示填写的内容来操作了。
从上图中可以看到向Solr服务器发送的XML格式的数据如下:<delete>
<query>*:*</query>
</delete>
<commit/>
查询文档
使用Solr的后台管理界面来查询文档时,Solr制定了一些参数用以完成不同需求下的搜索。下面,我会一一介绍这些参数。q
在该参数处填写的是查询字符串,可理解为根据关键字查询的关键字,而且是必填项。若查询所有则是*:*
;若想查询出商品名称中包含”幸福”的商品信息,则在该参数处填写的就应是product_name:幸福
。
从上图中可以清楚地看到一共查询出来了7条相关信息。
如果想查询出商品名称中包含”幸福”,同时又是”环保餐具”类别下的商品信息,那么在该参数处填写的就应是product_name:幸福 AND product_catalog_name:环保餐具
。
但很可惜,这样写虽然也能查询出来,但是Solr不推荐这么使用。那么你不仅就要问了,Solr到底推荐的是哪种写法呢?这就不得不学习下面这个参数了。fq
在该参数处填写的是查询过滤器,其作用是在q查询符合结果中过滤出同时符合fq查询的结果。如果想查询出商品名称中包含”幸福”,同时又是”环保餐具”类别下的商品信息,那么你可以按照下图所示填写的内容来操作。
这里,我还会多举几个例子,就是要让咱们多熟悉熟悉这个参数。如果想要查询出商品价格在10元(包括10元)以下,同时又是”环保餐具”类别下的商品信息,那么你就应该按照下图所示填写的内容来操作了。
如果想要查询出商品价格在10元(包括10元)以上,同时又是”环保餐具”类别下的商品信息,那么这时你会不会自己进行查询了呢?
若是想要查询出商品价格在10元(不包括10元)以上,同时又是”环保餐具”类别下的商品信息,则又应该怎样查询呢?现在,你总该会了吧!sort
在该参数处填写的是排序规则,格式是域名 desc|asc
。例如,如果想要查询商品价格在10元(不包括10元)以上,同时又在”环保餐具”类别下,并且按价格降序排序的商品信息,那么你就应该按照下图所示填写的内容来操作了。
从上图可以看出查询出来了99条商品记录,而且还是按照价格降序进行了排列。
如果想要查询商品价格在10元(不包括10元)以上,同时又在”环保餐具”类别下,并且按价格升序排序的商品信息,那么这时你会不会自己进行查询了呢?
从上图也能看出查询出来了99条商品记录,不同的一点是按照价格升序进行了排列。start与rows
这两参数分页显示时使用。start参数指定的是开始记录下标,从0开始;rows参数指定的是返回结果最多有多少条记录,配合start参数来实现分页。
大家可以按照下图所示填写的内容来进行分页查询,其实还是蛮简单的。
从上图的查询结果中可以看到,查询的开始记录下标为3,并且每次只查出了三条数据,这就是所谓的分页查询。fl
该参数指定返回那些field,用逗号或空格分隔多个field。要是按照下图所示填写的内容来进行分页查询,那么你会看到查询结果中一一列出了商品id、商品名称、商品价格、商品分类名称以及商品图片等field。
我们嫌列出的field太多了,能不能只列出商品id和商品名称这两个field呢?可以,只须在fl参数处填写id,product_name
即可,就像下图所示那样。df
该参数指定默认查询的field,如果在该参数处指定了默认查询的field,那么在查询字符串q里面就可以直接写查询关键字了。例如,大家可以试着按照下图所示填写的内容来进行查询。wt
该参数指定查询结果的输出格式,前面我们都是用的json格式,其实还要很多输出格式可供我们选择,比如xml、php、ruby、python等输出格式。这里,我会试着用xml格式输出一下(其实在实际开发并不会这样子做)。hl
该参数指定是否高亮,如果有高亮的需求的话,那么需要还需要指定好如下参数。
如果显示商品名称需要高亮,那么大家可以试着按照下图所示填写的内容来操作。
温馨提示:其实最后我们在代码中实现高亮的时候,为了显眼会设置样式,比如颜色为红色,所以在代码中实现的时候就需要写成<em style='color:red>
这个样子了!
到这里,使用Solr的后台管理界面来管理索引库的讲解就结束了,祝大家阅读愉快!!!