今天我将给大家介绍下SOLR5.5的More Like This 功能
- More Like This 的简介
- More Like This 配置
- More Like This 的代码
- More Like This 参数说明
- More Like This 的问题
More Like This 的简介
solr 提供了MoreLikeThis 功能,也就是相似查询的功能。Solr 使用 MoreLikeThisComponent(MLT)和 MoreLikeThisHandler 实现了该功能。如上所述,MLT 是与标准 SolrRequestHandler 集成在一起的;MoreLikeThisHandler 与 MLT 结合在一起,并添加了一些其他选项,但它要求发布一个单一的请求。我将着重讲述 MLT,因为使用它的可能性更大一些。
More Like This 配置
solr 的MoreLikeThis功能的配置相当简单,只需要在solrconfig.xml中添加如下代码段就可使用该功能。
<!-- Solr Morelikethis 文件相似度搜索用到此配置 -->
<requestHandler name="/mlt" class="solr.MoreLikeThisHandler" />
More Like This 的代码
SolrClient client new HttpSolrClient(url); SolrQuery query = new SolrQuery(); query.setRequestHandler("/" + MoreLikeThisParams.MLT); query.set(MoreLikeThisParams.DOC_COUNT, num <= 0 ? 5 : num);// 返回的相关文档数 // 长度低于此参数的词语不考虑,对中文来讲,单字无意义 query.set(MoreLikeThisParams.MIN_WORD_LEN, 2); // 返回的与一段文本最相关的关键词个数。太大会导致查询性能下降 query.set(MoreLikeThisParams.MAX_QUERY_TERMS, 10); // 查询结果不包含原始文档 query.set(MoreLikeThisParams.MATCH_INCLUDE, false); // 如果一个词在所有文本中出现次数小于1,则不考虑 query.set(MoreLikeThisParams.MIN_DOC_FREQ, 1); // 如果一个词在原始文本中出现次数小于2,则不考虑 query.set(MoreLikeThisParams.MIN_TERM_FREQ, 2); // 执行相似匹配的field 这里只根据标题推荐 query.set(MoreLikeThisParams.SIMILARITY_FIELDS,"title"); query.setQuery("id:11"); query.setRows(5); QueryResponse rsp = client.query(query); SolrDocumentList list = rsp.getResults(); for (SolrDocument document : list){ Sysem.out.println(document.getFieldValue("id")+":"+document.getFieldValue("title")); }
此处的url即,搜索服务器的访问url ,
例如http://127.0.0.1/solr/example
此处的example 是你所建立的core的名称。
More Like This 的参数说明
参数 | 说明 |
---|---|
id | 文档主键,或使用其他唯一键; |
mlt | 在查询时,打开/关闭 MoreLikeThisComponent 的布尔值。真假 |
fl | 需要返回的字段 |
mtl.fl | 根据哪些字段判断相似度 |
mlt.mindf | 最小文档频率,所在文档的个数小于这个值的词将不用于相似判断 |
mlt.mintf | 最小分词频率,在单个文档中出现频率小于这个值的词将不用于相似判断 |
mlt.count | 返回相似文章个数 |
上述代码中有些参数已经无效。下面是官方文档中列举的参数
More Like This 的问题
- MoreLikeThisParams.DOC_COUNT 在实际应用中发现这个参数已经无效了,在我使用的前期版本中,比如3.6,4.4 这个参数还是好用的,具体那个版本开始这个参数无效的,我没有去翻阅官方文档。替代方案:query.setRows(5) ,通过在query中设置返回行数来限制返回记录条数