实际业务里,同一个字符串往往既要“可全文搜索”,又要“可精确过滤/聚合/排序”。
这就是多字段的典型场景。
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}这意味着同一个 title,会有两种使用姿势:
title:给全文检索title.keyword:给精确匹配、排序、聚合
例如全文搜标题:
GET /city_products/_search
{
"query": {
"match": {
"title": "wireless headphones"
}
}
}例如按标题原值排序或聚合:
GET /city_products/_search
{
"size": 0,
"aggs": {
"top_titles": {
"terms": {
"field": "title.keyword"
}
}
}
}如果你直接拿 text 字段去做“按原值精确统计”,通常就会走偏,因为 text 的核心职责是“分析后的全文搜索”,不是“保留原样供分组统计”。