以 Eland 玩轉 Elasticsearch 8.12 Learning-to-Rank

1 為什么要在 Elasticsearch 上做 LTR?

適用版本: Elasticsearch ≥ 8.12.0
前置條件: 需擁有包含 “Serverless LTR” 的訂閱等級(詳見官方訂閱矩陣)
技術棧: Elasticsearch + Python + Eland + XGBoost / LightGBM / scikit-learn

  • 相關性瓶頸:經典 BM25 只能“打基礎”,很難兼顧業務特征(點擊率、銷量、評分……)。
  • 端到端成本:把向量檢索或深度模型接到 ES 之外,需要額外的服務網關、時延和 DevOps。
  • Elasticsearch 8.12.0 新特性:官方 Serverless LTR 能直接在 search → rescore 階段調用訓練好的模型,既繼承 ES 的伸縮性,又省去了微服務運維。

2 整體流程概覽

在這里插入圖片描述

3 環境準備

pip install "elasticsearch>=8.12" eland pandas scikit-learn xgboost lightgbm
export ELASTICSEARCH_URL="http://localhost:9200"
export ELASTIC_PASSWORD="elastic_password"

貼士:離線訓練最好用一套隔離的 ES 集群,避免大規模特征抽取沖擊線上查詢。

4 定義特征抽取模板(QueryFeatureExtractor)

from eland.ml.ltr import QueryFeatureExtractor, LTRModelConfigfeature_extractors = [# 1??  BM25 分數QueryFeatureExtractor(feature_name="title_bm25",query={"match": {"title": "{{query}}"}}),# 2??  Title 命中詞數QueryFeatureExtractor(feature_name="title_matched_term_count",query={"script_score": {"query": {"match": {"title": "{{query}}"}},"script": {"source": "return _termStats.matchedTermsCount();"}}}),# 3??  直接把文檔字段當特征QueryFeatureExtractor(feature_name="popularity",query={"script_score": {"query": {"exists": {"field": "popularity"}},"script": {"source": "return doc['popularity'].value;"}}}),# 4??  查詢詞長度QueryFeatureExtractor(feature_name="query_term_count",query={"script_score": {"query": {"match": {"title": "{{query}}"}},"script": {"source": "return _termStats.uniqueTermsCount();"}}}),
]ltr_config = LTRModelConfig(feature_extractors)

為什么不用自己寫腳本?
Eland 與 Elasticsearch 同步開發&測試,可確保訓練階段與線上推理的特征完全一致,避免“訓練-服務漂移”。

5 采集訓練數據(FeatureLogger)

from eland.ml.ltr import FeatureLogger
from elasticsearch import Elasticsearch
import pandas as pdes = Elasticsearch(ELASTICSEARCH_URL, basic_auth=("elastic", ELASTIC_PASSWORD))
MOVIE_INDEX = "movies_demo"logger = FeatureLogger(es, MOVIE_INDEX, ltr_config)# 假設我們已有一份人工評判文件 judgements.csv
judgements = pd.read_csv("judgements.csv")  # query, doc_id, relevancerecords = []
for _, row in judgements.iterrows():feats = logger.extract_features(query_params={"query": row.query},doc_ids=[row.doc_id])record = feats[0].to_dict()record["label"] = row.relevancerecords.append(record)df_train = pd.DataFrame(records)
df_train.to_csv("ltr_train.csv", index=False)

性能提示:FeatureLogger 會自動合并批量請求、最小化查詢次數,但大量特征 × 大量樣本仍可能對 ES 造成壓力。調低 size 或切分批次能進一步減負。

6 訓練 Ranker

以下以 XGBRanker 為例(LightGBM、RandomForest、DecisionTree 均可):

from xgboost import XGBRanker
import numpy as npX = df_train[feature_extractors_names].values
y = df_train["label"].values
group = df_train.groupby("query").size().to_numpy()  # 每個 query 的樣本數ranker = XGBRanker(objective="rank:pairwise",n_estimators=300,max_depth=6,learning_rate=0.1)
ranker.fit(X, y, group=group)

7 模型部署一鍵化(MLModel.import_ltr_model)

from eland.ml import MLModelMODEL_ID = "movies_ltr_xgboost_v1"MLModel.import_ltr_model(es_client=es,model=ranker,model_id=MODEL_ID,ltr_model_config=ltr_config,es_if_exists="replace"       # 本例重復執行時覆蓋
)

執行后,Eland 會自動:

  1. 將模型序列化為 ES 接受的 [Eland ML Pack] 格式;
  2. 調用 Create Trained Model API 上傳;
  3. 生成 inference_config,包含上文 4 個特征查詢模板。

8 線上調用:Search + Rescore

POST movies_demo/_search
{"query": {"match": {"title": "science fiction"}},"rescore": {"window_size": 100,"query": {"rescore_query": {"ltr_model": {"model_id": "movies_ltr_xgboost_v1","params": { "query": "science fiction" }}},"query_weight": 0.2,"rescore_query_weight": 1.0}}
}
  • window_size 控制重新排序的命中窗口,100-500 較常見;
  • params.query 必須與特征模板中的 {{query}} 對應;
  • query_weight 越小,模型重排權重越大。

9 模型管理運維

操作API說明
查看模型GET _ml/trained_models/<id>包含元數據、大小、創建時間
移除舊版DELETE _ml/trained_models/<id>勿忘同時清理索引模板里舊 rescore 配置
批量遷移POST _ml/trained_models/_revert結合 CI/CD 做藍綠發布
性能監控_nodes/stats inference關注推理延遲 & CPU/內存

10 最佳實踐與踩坑

場景建議
特征庫膨脹控制在 20-40 個以內;復雜邏輯交給模型學習權重,而不是寫 N 個腳本評分
交叉驗證使用 group k-fold,確保同一 query 不同時出現在 train&test
線上流量回滾給舊 BM25 排序保留 20% 流量,異常時快速切換
版本化movies_ltr_xgboost_v1v2,避免熱更新導致 cache 沖突
安全與訂閱開啟 HTTPS + token;無服務器版本僅在滿足訂閱級別時可用

11 總結

借助 8.12.0 新增的 Serverless LTR + Eland:

  • 開發側:用 Python 就能完成 特征抽取 → 訓練 → 部署 閉環,無需自研特征解析與序列化。
  • 運維側:模型與索引共生,統一在 ES 集群里監控、熱更新,簡化了線上鏈路。
  • 業務側:短期內即可驗證“學習排序 vs 傳統 BM25”的收益,并可逐步升級至更復雜的多階段檢索 / 向量召回方案。

開源筆記本示例:https://github.com/elastic/elasticsearch-labs/tree/main/notebooks/ltr

趕緊試試把你的點擊日志、評分字段喂給 XGBoost,讓搜索結果 “更懂業務” 吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94652.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94652.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94652.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCV入門:圖像處理基礎教程

OpenCV簡介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺和機器學習庫。它包含超過2500種優化算法&#xff0c;涵蓋圖像處理、物體識別、人臉檢測、3D重建、視頻分析等任務。 核心功能 圖像處理&#xff1a;濾波、邊緣檢測、幾…

影響內容傳播速度的因素有哪些?

內容的傳播速度是我們在衡量營銷效果時的重要指標。傳播速度越快&#xff0c;越能幫助品牌迅速覆蓋目標受眾&#xff0c;在短時間內提升影響力。影響內容傳播速度的方式來自多個方面&#xff0c;下面就讓我們一同來了解下這其中的因素。一、觀點價值觀點是否具有價值&#xff0…

css動態樣式

使用scss通過變量設置css動態樣式<template><div><!-- 方式一 --><p v-for"(item, index) in dataList" :key"index" :style"{--color: item.color}" >{{item.name}}</p><!-- 方式二 --><p v-for"(…

開源流媒體服務器ZLMediaKit 的Java Api實現的Java版ZLMediaKit流媒體服務器-二開視頻對話

安全性&#xff1a;使用了WSS&#xff08;WebSocket Secure&#xff09;協議確保通信安全 兼容性&#xff1a;支持現代瀏覽器的WebRTC功能 信令機制&#xff1a;通過WebSocket進行信令交換&#xff0c;確保連接建立 媒體傳輸&#xff1a;使用STUN服務器進行NAT穿透&#xff0c;…

mariadb10.3.35備份腳本

一、創建備份用戶[(none)]> create user buserlocalhost identified by tmrQ;[(none)]> GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO buserlocalhost;[(none)]> flush privileges;二、腳本# cat mysql_bask.sh #!/bin/bash # MariaDB 10.3.35…

W3D引擎游戲開發----從入門到精通【22】

配置完成基本DT物體項后&#xff0c;在這個DT物體項中開始添加這個玩家的動畫信息&#xff0c;如下所示。UseAnim設置是否使用動畫功能&#xff0c;這里開啟。AnimTypeN設置總共的動畫類型數&#xff0c;當前只有一個待機動畫&#xff0c;因此設置為1。AnimType1FrameN設置1號動…

在我國申請注冊的商標在國外可以用不!

近日一個網友找到普推知產商標老楊&#xff0c;問在我國申請注冊商標在新加坡和歐盟可以用不&#xff0c;當然用不成&#xff0c;根據商標法的地域性原則&#xff0c;商標權保護限于注冊地&#xff0c;馳名商標享有部分跨國保護&#xff0c;但是這個要有所在國相關法律證據。如…

在開發板上畫出一個2048棋盤的矩陣

#include “head.h"int* p lcd NULL; //顯示屏內存映射的起始地址int g lcd width; //LCD顯示屏的寬度int g lcd high ; //LCD顯示屏的高度int g lcd bpp; //每個像素點所占的比特位//int x:屏的X軸&#xff08;寬度、列&#xff09;坐標//int y:屏幕y軸&#xff08;高度、…

開源軟件與文化:從嬉皮士精神到數字時代的協同創新

開源軟件與文化&#xff1a;從嬉皮士精神到數字時代的協同創新 本文章由筆者使用提示詞驅動AI創作&#xff0c;并進行審閱。 文章目錄開源軟件與文化&#xff1a;從嬉皮士精神到數字時代的協同創新一、引言&#xff1a;開源的文化基因與技術革命二、開源軟件的文化根源&#x…

sigfillset 函數詳解

sigfillset 函數詳解 一、函數概念 sigfillset() 是 POSIX 信號處理中的核心函數&#xff0c;用于初始化并填充一個信號集&#xff0c;使其包含當前系統支持的所有信號。它是操作信號屏蔽字&#xff08;signal mask&#xff09;的基礎工具&#xff0c;常與 sigprocmask()、sigs…

Redis實戰(8) -- 分布式鎖Redission底層機制

介紹Redisson 是基于 Redis 實現的 Java 駐內存數據網格&#xff08;In-Memory Data Grid&#xff09;&#xff0c;提供了分布式和可擴展的 Java 數據結構&#xff0c;如分布式鎖、分布式集合等。【注意】如果需要重新實現redission&#xff0c;需要重新設置RedissionClient配置…

Linux基礎測試

linux基礎測試 一、環境準備 基礎環境信息 登錄用戶&#xff1a;root&#xff08;初始密碼&#xff1a;redhat&#xff09; 虛擬機啟動&#xff1a;登錄后執行 virt-manager&#xff0c;右鍵啟動 node1 和 node2 虛擬機 node1 信息&#xff1a;root 密碼為 redhat&#xf…

Linux中Docker Swarm實踐

一、部署前后分離使用你自己的自定義鏡像部署多個副本所有副本使用相同的配置和邏輯Nginx 做反向代理統一入口外部訪問形式如&#xff1a;http://your-domain/api/xxx1.1 建立私庫鏡像已構建并推送到可訪問的鏡像倉庫啟動 Docker Registry 容器docker run -d -p 5000:5000 --re…

Dash 中的 dcc.Clipboard 組件詳解:實現一鍵復制功能

dcc.Clipboard 是 Dash 核心組件庫中的一個實用工具&#xff0c;允許用戶將指定內容一鍵復制到系統剪貼板&#xff0c;極大提升用戶體驗。本文將深入解析該組件的用法、特性和實際應用場景。 一、組件核心功能與價值 dcc.Clipboard 解決了 Web 應用中的關鍵痛點&#xff1a; 簡…

初識C++類的6個默認成員函數

目錄 一、初始化和清理 二、拷貝復制 三、取地址重載 四、重要說明 五、注意事項 六、示例代碼 在C中&#xff0c;當一個類沒有顯式定義某些成員函數時&#xff0c;編譯器會自動生成6個默認成員函數。這些函數可以分為以下幾類&#xff1a; 一、初始化和清理 1、構造函數…

Spring事務失效場景?

題目詳細答案Spring事務失效的場景主要有以下幾種。非public方法使用Transactional場景描述&#xff1a;Spring事務管理是基于AOP實現的&#xff0c;而AOP對于JDK動態代理或CGLib動態代理只會代理public方法。如果事務方法的訪問修飾符為非public&#xff0c;SpringAOP無法正確…

1.電動汽車動力電池系統技術介紹與分類

1.電動汽車動力電池系統技術介紹與分類 1.1 電動汽車發展的三個 “黃金時代” 第一個黃金時代&#xff08;19 世紀末 - 20 世紀初&#xff09; 技術基礎&#xff1a;鉛酸蓄電池發明&#xff08;1859 年&#xff09;&#xff0c;推動電動三輪車&#xff08;1873 年&#xff09;、…

調用阿里云-阿里云百煉 AI

相關文檔&#xff1a;大模型服務平臺百煉控制臺 多輪對話&#xff1a;通義千問模型的多輪對話_大模型服務平臺百煉(Model Studio)-阿里云幫助中心 創建知識庫&#xff1a;大模型服務平臺百煉控制臺 創建智能體&#xff1a;大模型服務平臺百煉控制臺 點擊智能體發布后&#x…

Apache Flink:從實時數據分析到實時AI

引言歡迎踏上這段深入了解 Apache Flink 演進歷程的旅程&#xff0c;Apache Flink 是一項重新定義了實時數據處理的技術。本博客文章基于王峰&#xff08;阿里云開放數據平臺負責人、Apache Flink Committer&#xff09;在 2025 年 Flink Forward Asia 新加坡大會上的演講內容編…

oelove奧壹新版v11.7旗艦版婚戀系統微信原生小程序源碼上架容易遇到的幾個坑,避免遺漏參數白屏顯示等問題

oelove和 金媒我都用過一段時間&#xff0c;其中oelove 用的時間較多&#xff0c;也比較了解這個系統&#xff0c;這個系統比較不錯的就是小程序是原生的&#xff08;完全遵循微信開發者平臺規則非Uniapp&#xff09;開發的&#xff0c;原生小程序的特點就是兼容性好&#xff0…