用途
Elasticsearch Search Relevance 是一个用于改善 Elasticsearch 全文搜索相关性的技能,主要面向内容索引与商品目录索引。它帮助诊断索引映射和当前查询,选择正确的相关性手段,应用改动,并在报告成功前验证 top hits。
主要能力
该技能围绕两类相关性手段展开:
- 查询规则(Query Rules):用于确定性的置顶(pinned)或排除(exclude)文档。当用户指定某个文档必须在特定查询下排第一时使用。
- multi_match 与字段加权:用于开放式文本查询的自然排序改善。当某个短语的搜索结果整体偏弱时,从映射出发调整有机查询。
此外还涉及 operator、minimum_should_match 或同义词分析器,用于处理词元与用户语言不匹配的情况。
决策规则:如果用户指定某个文档必须在特定查询下排第一,使用查询规则;如果结果对某个短语整体偏弱,则根据映射调整有机查询。不要用极端加权、function_score 或排序子句来模拟置顶。
使用方式
该技能通过 elastic CLI 执行 Elasticsearch 操作。如果未安装 elastic CLI,应告知用户其用途,不要猜测凭据、直接调用 HTTP API 或尝试其他变通方法。文档中的操作以 HTTP 简写形式引用(如 GET /、GET /_cat/indices、GET /{index}/_mapping、GET /{index}/_settings/index.mode、POST /_query),但应始终使用 CLI 而非直接调用 HTTP API。
流程包括:
- 检查映射与当前查询。调用 GET / 确认连通性;索引未知时用 GET /_cat/indices 缩小候选,再调用 GET /{index}/_mapping。从映射中列出所有 text 字段和用于过滤的 keyword 字段,注意哪些字段短(精确)哪些长(召回)。
- 判断问题是确定性提升(一个文档必须在一个查询下胜出)还是有机排序(多个文档应获得更好评分)。
- 选择相关性手段。置顶/提升使用查询规则,创建 pinned 类型的规则集,设置 criteria 使规则仅在预期查询文本下触发,通过 ids 或 docs 指定要置顶的文档。有机排序则将长字段上的单字段 match 替换为跨映射 text 字段的 multi_match,对短字段加权(通常 title^2,description 不加权)。
- 应用改动。查询规则路径:用 PUT /_query_rules/{ruleset_id} 创建或替换规则集,用 GET 确认结构,用 POST /_query_rules/{ruleset_id}/_test 验证 criteria,并在搜索中使用 rule 查询引用规则集和 match_criteria。有机调优路径:构建候选 multi_match 查询,必要时用 POST /{index}/_analyze 检查分析。
- 测试并对比 top hits。每次候选前后用相同的 size(≥10)、用户查询字符串和 "track_scores": true 调用 POST /{index}/_search,对比 top _id 值及顺序、_score 和关键 _source 字段。
适用场景
适用于含 text(及可选 keyword)字段的索引上的 Query DSL 相关性调优,例如商品目录、文档、知识库。使用 POST /{index}/_search 进行评估,使用查询规则 API 处理置顶或排除文档。
限制
以下内容不在范围内:
- ES|QL 搜索(POST /_query)——应使用 elasticsearch-esql 技能。
- 语义/向量/混合检索——涉及不同的字段类型和检索器。
- 按价格、日期或热度排序而非修复文本相关性,除非用户明确想要非相关性排序。
指南
- 每个字段名都必须基于映射,不要凭空发明 name、content 或 body,需检查 GET /{index}/_mapping。
- 置顶用查询规则,排序用加权——商品运营属于查询规则;字段加权属于有机查询。
- match criteria 接线是必须的——规则 criteria 中的元数据键必须出现在搜索的 rule.match_criteria 对象中,并带有运行时值(通常是用户查询字符串)。
- 声称成功前先测试——运行基线和候选搜索,引用 top-hit 变化。
- keyword 字段用于过滤,text 字段用于搜索——在 filter 上下文中使用 keyword 字段,不要将其作为自然语言的主要全文目标。
- 始终交付具体产物——即使无法连接集群验证,也要产出完整的规则集 JSON(用于置顶)或候选查询体(用于有机调优),然后说明连接可用后如何验证。不要停留在高层大纲。
操作映射
文档提供了 HTTP 简写到 elastic CLI 命令的映射,例如 GET / 对应 elastic es info,GET /_cat/indices 对应 elastic es cat indices --index '<pattern>',GET /{index}/_mapping 对应 elastic es indices get-mapping --index '<index>',PUT /_query_rules/{ruleset_id} 对应 elastic es query-rules put-ruleset --ruleset-id '<id>' --rules '<json>',POST /{index}/_search 对应 elastic es search --index '<index>' --query '<json>' 等。