使用 LTR 优化搜索
训练模型后,您可以使用 sltr
查询来执行它。但是,不建议直接在整个索引上运行查询,因为它可能会占用大量 CPU 并影响 OpenSearch 集群的性能。该查询允许您将训练好的模型应用于搜索结果,示例如下
POST tmdb/_search
{
"query": {
"sltr": {
"params": {
"keywords": "rambo"
},
"model": "my_model"
}
}
}
对前 N 个结果进行重排序
为了更高效地执行模型,您可以使用内置的重排序功能,将模型应用于基线相关性查询的前 N 个结果,示例如下
POST tmdb/_search
{
"query": {
"match": {
"_all": "rambo"
}
},
"rescore": {
"window_size": 1000,
"query": {
"rescore_query": {
"sltr": {
"params": {
"keywords": "rambo"
},
"model": "my_model"
}
}
}
}
}
首先对术语 rambo
执行 match
查询,然后将 my_model
应用于前 1,000 个结果。此基线查询用于生成初始结果集,然后使用默认相似度 BM25 概率排名框架对这些结果进行评分,以计算相关性得分。
对特征子集进行重排序
您可以通过在 sltr
查询中指定 active_features
来选择性地对特征子集进行评分,示例如下。这允许您将模型的评分集中在选定的特征上,而任何未指定的特征都会被标记为缺失。您只需指定与 active_features
相关的 params
。如果您请求的特征名称不属于分配的特征集,则查询会抛出错误。
POST tmdb/_search
{
"query": {
"match": {
"_all": "rambo"
}
},
"rescore": {
"window_size": 1000,
"query": {
"rescore_query": {
"sltr": {
"params": {
"keywords": "rambo"
},
"model": "my_model",
"active_features": ["title_query"]
}
}
}
}
}
应用 my_model
模型,但仅对 title_query
特征进行评分。
将 sltr
与其他 OpenSearch 功能结合使用
sltr
查询可以与以下 OpenSearch 特性和功能集成,以创建更复杂和定制的搜索解决方案,这些解决方案不仅仅是将模型应用于结果
- 在应用模型之前,使用 OpenSearch 过滤器根据业务规则过滤掉结果
- 链式调用多个重排序以优化结果相关性
- 第一次重排序使用
sltr
处理相关性,第二次重排序用于业务考量 - 在基线查询中降低相关但低质量内容的权重,以防止其被重排序
后续步骤
了解 高级功能。