Elasticsearch 基础教程

Elasticsearch 高级教程

Elasticsearch 插件

Elasticsearch 笔记

Elasticsearch FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/elasticsearch-ltr.html

Elasticsearch ltr 插件详解


Elasticsearch 高版本支持 learning-to-rank 插件,它支持召回文档的相对复杂的模型排序,如 xgboost 模型,Ranklib 里支持的模型,同时也支持每个字段的相似分数提取,可将其作为后续精排的特征,该 ltr 插件是 es 高阶使用的一大亮点。

特征仓库

es ltr 里有特征仓库的概念,一个特征仓库其实就是一个 es 的索引,可以存储特征和模型的元数据。

初始化

一般初始化默认的特征仓库,如下:

PUT _ltr

删除默认的特征仓库,如下:

DELETE _ltr

至于删除特征仓库谨慎使用,它会清楚所有的特征集合、模型等数据。

特征及特征集合

一个特征集合是多个特征组成的集合,它是作用于特征打印(feature logging)和离线训练(offline training),具体是通过特征打印构造离线训练的样本,然后生成的模型是和特征集合是映射的关系。

创建特征集合

用 POST 请求构造特征集合,默认形式如下:

POST _ltr/_featureset/{featureset_name}
{
  ......
}

实际应用中,一般会根据业务自定义特征空间,它定义在 _ltr_featureset 之间,具体如下:

POST _ltr/movie_search/_featureset/more_movie_features
{
  "featureset": {
    "features": [
      {
        "name": "title_query",
        "params": [
          "keywords"
        ],
        "template_language": "mustache",
        "template": {
          "match": {
            "title": "{{keywords}}"
          }
        }
      },
      {
        "name": "title_query_boost",
        "params": [
          "some_multiplier"
        ],
        "template_language": "derived_expressions",
        "template": "title_query * some_multiplier"
      },
      {
        "name": "custom_title_query_boost",
        "params": [
          "some_multiplier"
        ],
        "template_language": "script_feature",
        "template": {
          "lang": "painless",
          "source": "params.feature_vector.get('title_query') * (long)params.some_multiplier",
          "params": {
            "some_multiplier": "some_multiplier"
          }
        }
      }
    ]
  }
}

关于更多内容参见 Elasticsearch ltr 特征集合及特征设计详解

Elasticsearch插件是一种用于扩展Elasticsearch功能的方式,允许你添加新的特性、功能或者改进现有功能。下面我会详细介绍 ...
Lombok是一个Java库,它可以通过注解来减少Java代码中的冗余,例如getter和setter方法、构造函数等。*`@Getter` ...
es ltr 里有特征仓库的概念,一个特征仓库其实就是一个 es 的索引,可以存储特征和模型的元数据。 ...
Lombok是一个Java库,它可以通过注解来简化Java代码的编写,特别是用于生成JavaBean的getter和setter方法、equ ...
生命周期和插件也是 Maven 的核心概念,我们的日常 Maven 命令行输入都对应生命周期,Maven 的生命周期是抽象的概念,其实际操作 ...