数据与AI
用查询规则固定置顶结果、用 multi_match…
当内容或商品目录索引的搜索结果排序不佳、需要让某文档在特定查询下置顶,或需要调优全文匹配时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用查询规则固定置顶结果、用 multi_特定
解决思路
- 通过 elastic CLI 执行所有 Elasticsearch 操作(不要直接调用 HTTP API 或猜测凭据);若未安装 elastic CLI,先告知用户其用途。
- 先调用 GET / 确认连通性;索引未知时用 GET /_cat/indices 缩小候选,再调用 GET /{index}/_mapping。
- 从 mapping 中列出所有 text 字段(如 title、description)和用于过滤的 keyword 字段(如 brand、category),区分短字段(精确)与长字段(召回),并阅读用户现有查询体,判断其查询了哪些字段、是否已使用 rule、multi_match 或单字段 match。
- 判断问题是「确定性置顶」(某文档必须在某查询下排第一)还是「有机排序」(多个文档应得分更高);收集索引名、mapping 属性、当前查询 JSON、示例查询串,以及置顶时的目标文档 ID。
- 置顶/推广场景:创建 query-rules ruleset,规则类型用 pinned(推广绝不用 exclude);criteria 只在目标查询文本上触发(如对 metadata key query_string 用 contains 或 exact,值为 "sale");actions 用 ids(如 ["SKU123"])或 docs(如 [{"_index":"catalog","_id":"SKU123"}])固定文档,_id 可能跨索引不唯一时用 docs。
- 有机排序场景:把长字段上的单字段 match 替换为跨已映射 text 字段的 multi_match,给短字段加权(通常 title^2,description 不加权);多词召回仍差时考虑 operator、minimum_should_match 或同义词分析器;不要用按价格、日期或 keyword 字段排序来伪造文本相关性,也不要用 term 查询 .keyword 子字段来匹配已分析的短语。
- 每次请求只选一个主要手段;确定所选字段与加权、ruleset ID 与 rule ID 名称、criteria metadata key,以及置顶文档标识。
- 查询规则路径:用 PUT /_query_rules/{ruleset_id} 创建或替换 ruleset(或用 PUT /_query_rules/{ruleset_id}/_rule/{rule_id} 添加单条规则),用 GET /_query_rules/{ruleset_id} 确认结构,用 POST /_query_rules/{ruleset_id}/_test 并传入与搜索时相同的 match_criteria 验证 criteria。
- 查询规则路径:搜索时必须用 rule 查询,其 ruleset_id 引用该 ruleset,match_criteria 为每个 criteria metadata key 提供值(如 "query_string": "sale"),把常规相关性子句放在 organic 内;仅创建 ruleset 不会置顶任何内容。
- 有机调优路径:基于 mapping 构建候选 multi_match(或等价的 bool/should)查询;当分词能解释漏召回时,用 POST /{index}/_analyze 检查示例查询文本的分析结果。
- 每次改动后停止继续叠加无关修改,先测试再继续。
- 测试对比:改动前后都用相同的 size(≥10)、用户查询串和 "track_scores": true 调用 POST /{index}/_search;置顶场景搜索体必须包含 rule 查询。
- 每次运行对比 top _id 值与顺序、相关时的 _score、关键 _source 字段(title、description、商品 id)。
- 置顶场景确认 match_criteria 匹配查询时目标文档(如 SKU123)排第一,且有机匹配仍出现在其下方;有机调优场景确认标题和意图一致的文档上升,且未依赖排序或 keyword 精确匹配取巧。
- 选择有证据支持的候选方案;若无改进,报告尝试过的内容并提出下一个手段(如同义词或增加字段)。
- 始终交付具体产物:即使无法连接集群验证,也要产出完整的 ruleset JSON(置顶)或候选查询体(有机调优),并说明连接可用后如何验证,不要只给高层大纲。
- 每个字段名都必须以 mapping 为依据,未经 GET /{index}/_mapping 检查不得臆造 name、content 或 body 等字段。
- keyword 字段用于 filter 上下文过滤,不作为自然语言全文检索的主要目标。
适用边界 · 注意事项
- 不适用于 ES|QL 分析(POST /_query),应改用 elasticsearch-esql 技能。
- 不适用于语义/向量/混合检索,其字段类型与 retriever 不同。
- 不适用于按价格、日期或热度排序而非修复文本相关性的场景,除非用户明确想要非相关性排序。