程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> ElasticSearch java API-使用More like this實現基於內容的推薦

ElasticSearch java API-使用More like this實現基於內容的推薦

編輯:JAVA綜合教程

ElasticSearch java API-使用More like this實現基於內容的推薦


ElasticSearch java API-使用More like this實現基於內容的推薦

基於內容的推薦通常是給定一篇文檔信息,然後給用戶推薦與該文檔相識的文檔。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("測試").minTermFreq(10);  

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

MoreLikeThisFieldQueryBuilder query = QueryBuilders.moreLikeThisFieldQuery("測試");

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved