今天我將給大家介紹下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中設置返回行數來限制返回記錄條數