Elasticsearch 基础教程

Elasticsearch 高级教程

Elasticsearch 插件

Elasticsearch 笔记

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 特征集合及特征设计详解