Elastic日报第2期

地址:https://elasticsearch.cn/article/202

1. 在Elasticsearch中应用机器学习排序LTR

将机器学习集成到搜索排名;使用简单的神经网络,最优化文档特征的权重值,最终达到一个最优解。

核心概念

使用不同的特征得到TopN的结果并进行评价,根据评价信息训练模型。

  1. 通过分析来衡量用户所反馈的相关度,并构建一个评价列表,将文档分级为精确相关的、模糊相关的和无关的,并用于查询;
  2. 猜想哪些特征可能有助于相关度预测,比如特定属性匹配程度的TF-IDF相关度、新颖性,以及搜索用户的个性化特征等;
  3. 训练一个模型,将这些特征准确无误地映射到一个相关性得分上;
  4. 部署该模型到你的搜索基础设施中,在线上环境中使用它来对搜索结果排序。

基本原理

LTR插件集成了RankLib和Elasticsearch。RankLib有一个输入文件作为评价依据,并输出一个模型,该模型是内置的可阅读格式。接下来RankLib可通过编程或命令行来训练模型。一旦有了模型,Elasticsearch插件就会包含以下内容:

  • 一个自定义的Elasticsearch脚本语言,叫做ranklib,它把RankLib生成的模型作为一个Elasticsearch脚本;
  • 一个自定义的LTR查询,它输入一个包含Query DSL查询(那些特征)、一个模型名称(就是第一步中上传的模型)和打分结果的列表。

由于LTR模型的实现成本很高,人们几乎不会直接使用LTR查询,而是对结果的Top N重新打分,比如:

{
    "query": {/*a simple base query goes here*/},
    "rescore": {
        "window_size": 100,
        "query": {
           "rescore_query": {
              "ltr": {
                  "model": {
                     "stored": "dummy"
                  },
                  "features": [{
                       "match": {
                           "title": 
                       }
                   }
               ...

实践步骤

  • LTR概念:http://opensourceconnections.com/blog/2017/02/24/what-is-learning-to-rank/
  • Github地址:https://github.com/o19s/elasticsearch-learning-to-rank
  • Demo代码地址:https://github.com/o19s/elasticsearch-learning-to-rank/tree/master/demo
  1. 安装依赖准备数据;
  2. 下载TMDB数据,下载RankLib.jar;
  3. 启动ES并安装LTR插件;
  4. 索引数据到ES;
  5. 新建并且上传特征,特征使用1~n.json文件,每个特征可以包含一个简单查询或者复杂查询;
  6. 收集评价信息,每一个特征会生成一个三元组的评价信息文件;
  7. 将全部特征的评价信息文件进行合并;
  8. 使用合并后的文件进行训练;
  9. 使用训练结果进行搜索。
# 评价信息文件 ,,
# qid:1: rambo
#
#
# grade (0-4)   queryid  # docId    title
4   qid:1 # 7555    Rambo

# 评价文件合并结果
4   qid:1   1:12.318446 2:9.8376875 # 7555  rambo

项目文档

地址:http://elasticsearch-learning-to-rank.readthedocs.io/en/latest/index.html

2. 用ElasticSearch搭建自己的搜索和分析引擎

地址:http://wetest.qq.com/lab/view/300.html

一篇入门加实践的文章,文章主要介绍了ES的核心概念、关键配置项、Mapping基本用法、聚合的用法,并结合实例对ES的性能进行了分析。

你可能感兴趣的:(Elastic日报第2期)