分布式搜尋elasticsearch java API 之(八)——使用More like this實現基於內容的推薦

來源:互聯網
上載者:User

基於內容的推薦通常是給定一篇文檔資訊,然後給使用者推薦與該文檔相識的文檔。Lucene的api中有實現查詢文章相似性的介面,叫MoreLikeThis。Elasticsearch封裝了該介面,通過Elasticsearch的More like this查詢介面,我們可以非常方便的實現基於內容的推薦。

先看一個查詢請求的json例子:

{     "more_like_this" : {         "fields" : ["title", "content"],         "like_text" : "text like this one",     } }

其中:

fields是要匹配的欄位,如果不填的話預設是_all欄位

like_text是匹配的文本。

除此之外還可以添加下麵條件來調節結果

percent_terms_to_match:匹配項(term)的百分比,預設是0.3

min_term_freq:一篇文檔中一個詞語至少出現次數,小於這個值的詞將被忽略,預設是2

max_query_terms:一條查詢語句中允許最多查詢詞語的個數,預設是25

stop_words:設定停止詞,匹配時會忽略停止詞

min_doc_freq:一個詞語最少在多少篇文檔中出現,小於這個值的詞會將被忽略,預設是無限制

max_doc_freq:一個詞語最多在多少篇文檔中出現,大於這個值的詞會將被忽略,預設是無限制

min_word_len:最小的詞語長度,預設是0

max_word_len:最多的詞語長度,預設無限制

boost_terms:設定詞語權重,預設是1

boost:設定查詢權重,預設是1

analyzer:設定使用的分詞器,預設是使用該欄位指定的分詞器


下面介紹下如何用java api調用,一共有三種調用方式,不過本質上都是一樣的,只不過是做了一些不同程度的封裝。

MoreLikeThisRequestBuilder mlt = new MoreLikeThisRequestBuilder(client, "indexName", "indexType", "id");mlt.setField("title");//匹配的欄位SearchResponse response = client.moreLikeThis(mlt.request()).actionGet();

這種是在查詢與某個id的文檔相似的文檔。這個介面是直接在client那調用的,比較特殊。還有兩種就是構造Query進行查詢

MoreLikeThisQueryBuilder query = QueryBuilders.moreLikeThisQuery();query.boost(1.0f).likeText("xxx").minTermFreq(10);

這裡的boost、likeText方法完全和上面的參數對應的。下面這種就是把要匹配的欄位作為參數傳進來,參數和MoreLikeThisQueryBuilder是一樣的。

MoreLikeThisFieldQueryBuilder query = QueryBuilders.moreLikeThisFieldQuery("fieldNmae");

參考資料:http://www.searchtech.pro/articles/2013/02/16/1360971902049.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.