全书目录

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

第四章:为什么 analyzer 这么重要 —— 线索不先拆对,后面全错

1 分钟 308 字 第 420 / 962 个阅读单元

很多人学 Elasticsearch 时,只盯着 query,却忽视了 analyzer。这是最容易走偏的地方之一。

因为全文检索不是拿原句直接硬比,而是:

text
原始文本
  │
  ▼
analyzer 分析
  │
  ├── 字符过滤
  ├── 分词
  ├── 小写化
  ├── 停用词处理
  └── 其他归一化
  ▼
词项(terms)
  │
  ▼
写入倒排索引

也就是说:

用户搜不到,很多时候不是 query 写错,而是文本在进入索引时就被拆错了。

看一个最小例子:

http
POST /_analyze
{
  "analyzer": "standard",
  "text": "Wireless Noise Cancelling Headphones"
}

概念上你会得到接近这样的词项:

json
["wireless", "noise", "cancelling", "headphones"]

这说明 standard analyzer 做了几件关键事:

  • 识别词边界
  • 去掉大部分标点影响
  • 统一大小写

所以全文搜索真正比较的,不是整句字符串,而是这些被拆出来的词项。

这也是为什么下面两种字段要分清:

  • text:适合全文检索,值会被分析
  • keyword:适合精确匹配、排序、聚合,值通常按原样保留

这条线千万别乱:

text
text    -> 给“搜索句子/文章/标题”
keyword -> 给“品牌/状态/ID/标签/分类”