Update avaliable. Click RELOAD to update.
目录

solr-morelikethis相似度查询的使用说明

1. 简介

solrmorelikethis从字面的解释是”更多的类似这个“,常常用在关联查询上,使用上很简单,更多的是在solr查询语法上,morelikethis有两种实现方式,MoreLikeThisHandlerSearchHandler

2. 使用

2.1 在需要使用相似度查询的字段上属性termVectors

schema.xml中配置需要使用相似度查询的字段,在其增加”termVectors=true“的属性,这里在productNameproductCode字段中增加,如下:

<field name="productId" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="productName" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" termVectors="true" />
<field name="productPrice" type="float" indexed="true" stored="true" required="true" multiValued="false" />
<field name="productCode" type="string" indexed="true" stored="true" required="true" multiValued="false" termVectors="true" />
<field name="createTime" type="date" indexed="true" stored="true" required="true" multiValued="false" />

如何确定相似度字段,例如查询productId10005的产品及其相似产品,那么就需要确定哪个属性做相似度,比如做了分词的商品名称、商品助记码或者商品关键字。这里注意的是若是没有分词的字段是全量匹配

2.2 常用的morelikethis通用请求参数

现在不必理解这些参数,需要结合下面几个案例去理解。这里通用参数指的是MoreLikeThisHandlerSearchHandler都可以使用的。

名称含义
mlt.fl指定需要查询的相似度字段,多个用逗号分隔(需要使用termVectors=”true”声明的字段)
mlt.mintf最小分词频率,在单个文档中小于这个值的词将不用于相似判断
mlt.mindf最小文档频率,所在文档的个数小于这个词将不用于相似判断
mlt.minwl最小单词长度,小于此长度的字段都不做相似度查询
mlt.maxwl最大单词长度,大于此长度的字段都不做相似度查询

2.3 两种实现方式的使用

SearchHandlerMoreLikeThisHandler使用基本相同,SearchHandler使用的是原有的select方式检索数据,不需要配置什么,直接可以使用。而MoreLikeThisHandler则需要在solrconfig.xml中注册请求处理器,配置也很简单,将以下代码添加到solrconfig.xml中即可。

<requestHandler name="/mlt" class="solr.MoreLikeThisHandler"></requestHandler>

下面是两种方式请求相同数据的路径:

//localhost:8983/solr/core/select?q=productId%3A10003&wt=json&indent=true&mlt=true&mlt.fl=productName

//localhost:8983/solr/core/mlt?q=productId%3A10003&wt=json&indent=true&mlt=true&mlt.fl=productName

由上面可知,两种实现方式目前仅仅是请求的路径不一样,一个是”/select“,另外一个是”/mlt“的,返回的结果集是相同的,具体使用哪种方式还请自行实践。

3. 场景案例

# 根据productId查询单个商品并以productName为相似度字段检索出相关商品
//localhost:8983/solr/core/mlt?q=productId%3A10003&wt=json&indent=true&mlt=true&mlt.fl=productName

# 根据productId查询单个商品并以productName和productCode为相似度字段检索出相关商品
//localhost:8983/solr/core/mlt?q=productId%3A10003&wt=json&indent=true&mlt=true&mlt.fl=productName,productCode

# 根据productId查询单个商品并以productName为相似度字段检索出相关商品,条目数限定为5条
//localhost:8983/solr/core/mlt?q=productId%3A10003&wt=json&indent=true&mlt=true&mlt.fl=productName&mlt.count=3

相似度检索数据,需要先定义需要做声明相似度的字段,这个字段可以是任何类型也可以是中文分词,根据不同参数控制检索的数据粒度,结合自己的业务筛选出合适的关联数据。

版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2016/08/solr-more-like-this/