Solr中提供了MoreLikeThis的功能,用于查询相似的文档 。应用场景(个人理解):1. 你写的文章和别人文章相似度高的话,有一方是抄袭的可能性就很大。2. 查找相似的产品。
MoreLikeThis 可以作为searchComponent使用,也可以作为requestHandler使用。
MoreLikeThis 的基础属性:
参数 | 描述 |
mlt.fl | 指定用于判断是否相似的字段。如可能,尽量设置这些字段的 termVectors=true |
mlt.mintf | 指定最小的分词频率。小于此频率的分词将不会被计算在内 |
mlt.mindf | 指定最小的文档频率。分词所在文档的个数小于此值的话将不会被忽略。 |
mlt.maxdf | 指定最大的文档频率。分词所在文档的个数大于此值的话将不会被忽略。比如“的”之类的词,几乎每个文档都有,此类分词不应用于相似度的计算 |
mlt.minwl | 指定分词的最小长度。小于此长度的单词将被忽略。 |
mlt.maxwl | 指定分词的最大长度。大于此长度的单词将被忽略。 |
mlt.maxqt | 指定最大的用于查询的分词数 |
mlt.maxntp | 对于termVectors=false的字段,需要分析的最大的token数。 |
mlt.boost | 是否开启字段加权功能 |
mlt.qf | 设置 mlt.fl中的各个字段的权重。 |
MoreLikeThis 做为searchComponent 使用时的属性:
参数 | 描述 |
mlt | 设置为true时,启用MoreLikeThis的功能 |
mlt.count | 默认值5. 设置返回的相似的文档数 |
MoreLikeThis 做为requestHandler 使用时的属性:
参数 | 描述 |
mlt.match.include | 设置是否返回符合的文档。醉了,如果不返回的话,我配置这个requestHandler干嘛? |
mlt.match.offset | |
mlt.interestingTerms | 控制如何呈现terms. 三个可选的值:none(不显示), list(列出terms), details(列出terms并加上权重信息) |
例子:
<requestHandler name="/mlt" class="solr.MoreLikeThisHandler"> <lst name="defaults"> <str name="wt">json</str> <str name="fl">content,title</str> <str name="mlt.qf"> content^2.0 title^1.0 </str> <str name="mlt.fl">content,title</str> <str name="mlt.match.include">true</str> <str name="mlt.mintf">1</str> <str name="mlt.mindf">1</str> <str name="mlt.minwl">2</str> <int name="mlt.count">3</int> </lst> </requestHandler>