用途:实现全文搜索、自动补全、分面搜索与相关性调优,覆盖基于 Lucene 的 Elasticsearch/OpenSearch 以及更轻量的 Meilisearch/Typesense。核心决策是字段用 text(分词、全文、计分)还是 keyword(精确、可聚合、可排序、可过滤),映射要先定对。
主要能力与要点:分析器由字符过滤器、分词器、词元过滤器组成,索引期与查询期分析器不匹配是最隐蔽的搜索 bug,自动补全常用索引期 edge_ngram、查询期仅小写;可用 GET /index/_analyze 或 POST /products/_analyze 验证实际词元。生产环境应使用显式映射,避免动态映射类型漂移;多字段(如 name 与 name.raw)可同时支持搜索与聚合。精确、范围、布尔条件应放在 filter 上下文(可缓存、不计分),只有影响排序时才用 must/should。相关性默认 BM25,可调 k1、b,优先用字段加权(如 name^5)与 multi_match 类型选择;function_score 可注入销量、时间衰减等业务信号,缺失字段需设 missing,并用 log1p/sqrt 抑制量级。分面搜索需用 post_filter 与按聚合过滤,使结果收窄而分面仍显示全部选项。深分页超过约 1 万条应使用 search_after(配合 PIT 保证一致性),而非 from/size。自动补全可选 completion suggester、search_as_you_type、edge_ngram、match_phrase_prefix,客户端应防抖 200–300ms、至少 2 字符并取消过期请求。零停机重建索引通过别名原子切换实现,迁移期间需处理写入。批量索引用 _bulk,批量约 5–15MB,导入时可临时设 number_of_replicas: 0 与 refresh_interval: -1。
限制:资料未提供该技能的安装命令、收费、平台与具体使用步骤;terms 聚合计数在分片索引上可能近似,不应作为计费依据;高亮片段在 UI 中需注意 XSS。