全书目录

第二十三篇:Elasticsearch 完全指南 —— 全城检索雷达宇宙

第八章:为什么 `text` 和 `keyword` 经常一起出现 —— 同一份资料,给两套雷达用途

1 分钟 211 字 第 424 / 962 个阅读单元

实际业务里,同一个字符串往往既要“可全文搜索”,又要“可精确过滤/聚合/排序”。

这就是多字段的典型场景。

http
"title": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword"
    }
  }
}

这意味着同一个 title,会有两种使用姿势:

  • title:给全文检索
  • title.keyword:给精确匹配、排序、聚合

例如全文搜标题:

http
GET /city_products/_search
{
  "query": {
    "match": {
      "title": "wireless headphones"
    }
  }
}

例如按标题原值排序或聚合:

http
GET /city_products/_search
{
  "size": 0,
  "aggs": {
    "top_titles": {
      "terms": {
        "field": "title.keyword"
      }
    }
  }
}

如果你直接拿 text 字段去做“按原值精确统计”,通常就会走偏,因为 text 的核心职责是“分析后的全文搜索”,不是“保留原样供分组统计”。