使用 Learning To Rank 搜索

编辑

此功能在 8.12.0 版本中引入,仅对某些订阅级别可用。有关更多信息,请参阅 https://elastic.ac.cn/subscriptions

Learning To Rank 作为重排序器

编辑

一旦您的 LTR 模型在 Elasticsearch 中训练并部署,它就可以用作 重排序器搜索 API

resp = client.search(
    index="my-index",
    query={
        "multi_match": {
            "fields": [
                "title",
                "content"
            ],
            "query": "the quick brown fox"
        }
    },
    rescore={
        "learning_to_rank": {
            "model_id": "ltr-model",
            "params": {
                "query_text": "the quick brown fox"
            }
        },
        "window_size": 100
    },
)
print(resp)
response = client.search(
  index: 'my-index',
  body: {
    query: {
      multi_match: {
        fields: [
          'title',
          'content'
        ],
        query: 'the quick brown fox'
      }
    },
    rescore: {
      learning_to_rank: {
        model_id: 'ltr-model',
        params: {
          query_text: 'the quick brown fox'
        }
      },
      window_size: 100
    }
  }
)
puts response
const response = await client.search({
  index: "my-index",
  query: {
    multi_match: {
      fields: ["title", "content"],
      query: "the quick brown fox",
    },
  },
  rescore: {
    learning_to_rank: {
      model_id: "ltr-model",
      params: {
        query_text: "the quick brown fox",
      },
    },
    window_size: 100,
  },
});
console.log(response);
GET my-index/_search
{
  "query": { 
    "multi_match": {
      "fields": ["title", "content"],
      "query": "the quick brown fox"
    }
  },
  "rescore": {
    "learning_to_rank": {
      "model_id": "ltr-model", 
      "params": { 
        "query_text": "the quick brown fox"
      }
    },
    "window_size": 100 
  }
}

第一阶段查询,提供要重新排序的文档。

上传到 Elasticsearch 的已训练模型的唯一标识符。

要传递给用于特征的查询模板的命名参数。

每个分片上重排序器应检查的文档数量。

已知限制
编辑
重排序窗口大小
编辑

LTR 模型返回的分数通常与第一阶段查询发出的分数不可比,并且可能低于未重新排序的分数。这可能导致未重新排序的结果文档的排名高于重新排序的文档。为了防止这种情况,LTR 重排序器需要 window_size 参数,并且该参数应大于或等于 from + size

分页
编辑

当向用户公开分页时,window_size 应保持不变,因为通过传递不同的 from 值来逐步浏览每个页面。更改 window_size 会更改顶级命中结果,导致结果在用户浏览页面时令人困惑地发生变化。

负分数
编辑

根据模型的训练方式,模型可能会为文档返回负分数。虽然第一阶段检索和排序不允许负分数,但在 LTR 重排序器中可以使用它们。