官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-mlt-query.html

基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档。Lucene的api中有实现查询文章相似度的接口,叫MoreLikeThis。Elasticsearch封装了该接口,通过Elasticsearch的More like this查询接口,我们可以非常方便的实现基于内容的推荐。

先看一个查询请求的json例子:

GET /mychat/mytype/_search
{
   "query":{   
        "more_like_this":{   
            "fields" : ["ask", "answer"],   
            "like_text" : "中国" ,
            "min_term_freq" : 1,
            "max_query_terms" : 12
        }   
    }  
}

其中:

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调用,一共有三种调用方式,不过本质上都是一样的,只不过是做了一些不同程度的封装。

[java] view plaincopy
  1. MoreLikeThisRequestBuilder mlt = new MoreLikeThisRequestBuilder(client, "indexName", "indexType", "id");
  2. mlt.setField("title");//匹配的字段
  3. SearchResponse response = client.moreLikeThis(mlt.request()).actionGet();

这种是在查询与某个id的文档相似的文档。这个接口是直接在client那调用的,比较特殊。还有两种就是构造Query进行查询

[java] view plaincopy
  1. MoreLikeThisQueryBuilder query = QueryBuilders.moreLikeThisQuery();
  2. query.boost(1.0f).likeText("xxx").minTermFreq(10);

这里的boost、likeText方法完全和上面的参数对应的。下面这种就是把要匹配的字段作为参数传进来,参数和MoreLikeThisQueryBuilder是一样的。

[java] view plaincopy
  1. MoreLikeThisFieldQueryBuilder query = QueryBuilders.moreLikeThisFieldQuery("fieldNmae");

最后给一个创建索引的DSL语句:


{"settings": {"number_of_shards": 2,"number_of_replicas": 1},"mappings": {"chat_str": {"date_detection": false,"dynamic_templates": [{"es_string": {"match": "*","match_mapping_type": "string","mapping": {"type": "string","index": "analyzed","analyzer": "ik_max_word"}}}],"properties": {"title": {"type": "string","index": "analyzed","analyzer": "ik_max_word"},"content": {"type": "string","index": "analyzed","analyzer": "ik_max_word"}}}}
}

elasticsearch使用more_like_this实现基于内容的推荐相关推荐

  1. 一文全面了解基于内容的推荐算法

    作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) 这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文 ...

  2. Recommender Systems基于内容的推荐

    基于内容的推荐的基本推荐思路是:用户喜欢幻想小说,这本书是幻想小说,则用户有可能喜欢这本小说 两方面要求:(1)知道用户的喜好:(2)知道物品的属性 基于内容的推荐相比协同过滤方法(个人观点):协同过 ...

  3. 1分钟了解基于内容的推荐,pm又懂了

    转载自 1分钟了解基于内容的推荐,pm又懂了 什么是基于内容的推荐(Content-based Recommendation)? 答:通过用户历史感兴趣的信息,抽象信息内容共性,根据内容共性推荐其他信 ...

  4. 吴恩达机器学习系列23:基于内容的推荐算法

    如今,推荐算法已经深入到我们生活的各个方面,比如说淘宝根据我们之前的浏览记录给我们推荐想要购买的商品:抖音不停地给我们推荐各种我们感兴趣的视频(虽然我个人不太喜欢抖音,觉得抖音会让我们丧失独立思考的能 ...

  5. 《推荐系统笔记(十六)》tf-idf与基于内容的推荐(简单的酒店推荐)

    基于内容的推荐,仅仅依赖于物品的信息,对于系统冷启动和物品冷启动,可以有效解决.拿到物品的信息之后,对物品信息进行处理,生成特征向量,然后就可以定义物品相似度,对物品进行推荐. 通常,基于内容的推荐遵 ...

  6. 新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)

    2018/10/04更新 这篇文章似乎被越来越多的小伙伴看到了,所以觉得有必要做一些进一步的详细说明. 首先按照本文所讲解的推荐思路进行新闻推荐的推荐系统,我已经实现并已经放在Github上了.欢迎小 ...

  7. 新闻推荐系统:基于内容的推荐算法——TFIDF、衰减机制(github java代码)

    转自: 因为开发了一个新闻推荐系统的模块,在推荐算法这一块涉及到了基于内容的推荐算法(Content-Based Recommendation),于是借此机会,基于自己看了网上各种资料后对该分类方法的 ...

  8. 推荐算法(2):基于内容的推荐

    推荐算法(1):协同过滤总结 推荐算法(2):基于内容的推荐 推荐算法(3):利用用户标签数据 推荐算法(4)利用上下文信息 推荐算法(5)利用社交网络数据 推荐算法(6) 实例 推荐算法(7)缺失的 ...

  9. 推荐系统_基于内容的推荐

    关于推荐系统的算法大概可以分类两类: 一类就是基于用户或者基于商品的协同过滤,我们主要是通过用户行为这个海量数据来挖掘出用户在品味上的一些相似程度,或者说 商品的相似程度,然后我们在利用相似性来进行推 ...

最新文章

  1. 微信小程序调用php,微信小程序调用PHP后台接口 解析纯html文本
  2. 三角形一点到三边距离最小_高中数学:利用正弦定理、余弦定理求解三角形基础题...
  3. JZOJ 1219. Num
  4. java.lang.Record:规范草案
  5. WinCE 5.0 WIFI 无线网卡的配置和建立连接(转)
  6. educoder实训平台java入门_educoder上的实训题目(学习-Java包装类之Byte类)
  7. 【Codeforces Round #507 (Div. 2, based on Olympiad of Metropolises) B】Shashlik Cooking
  8. 自主云服务器处理器_云服务器对处理器的要求
  9. From the overall look and feel
  10. Hadoop(十二)MapReduce概述
  11. php中is_scalar判断是否是标量
  12. html原生js请求
  13. 【springboot】SMS短信通实现手机验证码
  14. nyoj_71 独木舟上的旅行
  15. 计算机视觉中的数据流与模型训练代码总结!
  16. C语言邻接矩阵的实现
  17. Java:IO流的概念、作用、分类
  18. 怎么设置虚拟拨号服务器,如何设置PPPoE上网(ADSL虚拟拨号)
  19. 算法 | 详解斐波那契数列问题
  20. 计算机基础实验测试题第一章(悄悄变强秘籍)

热门文章

  1. URI和URL的区别(12万访问量)
  2. Pod资源管理(pod容器分类,k8s添加harbor私库,上传下载私库)
  3. 怎么让饼状图里面显示百分比_教你用matplotlib绘制带有负值的饼状图
  4. python笔记之正则表达式
  5. ae导出json_关于AE转json动画开发避坑指南
  6. led显示屏服务器怎么设置,led显示屏怎么改字幕 led显示屏改字幕方法
  7. lisp实战文库_LISP编程举例
  8. gen文件下有两个R.java_gen目录无法更新,或者gen目录下的R.JAVA文件无法生成
  9. Linux如何指向mysql_linux的基本操作(mysql 的基本操作)
  10. 获取字符串中的.前面的长度_算法连载之求解不含有重复字符的最长子串长度...