注意:
all:es6.x默认已禁用全文索引all,es7.0彻底移除该配置
_all 字段
这个简单搜索返回包含 mary 的所有文档:
GET /_search?q=mary
之前的例子中,我们在 tweet
和 name
字段中搜索内容。然而,这个查询的结果在三个地方提到了 mary
:
- 有一个用户叫做 Mary
- 6条微博发自 Mary
- 一条微博直接 @mary
Elasticsearch 是如何在三个不同的字段中查找到结果的呢?
当索引一个文档的时候,Elasticsearch 取出所有字段的值拼接成一个大的字符串,作为 _all
字段进行索引。例如,当索引这个文档时:
{
"tweet": "However did I manage before Elasticsearch?",
"date": "2014-09-14",
"name": "Mary Jones",
"user_id": 1
}
这就好似增加了一个名叫 _all
的额外字段:
"However did I manage before Elasticsearch? 2014-09-14 Mary Jones 1"
随着应用的发展,搜索需求变得更加明确,你会发现自己越来越少使用 _all 字段。 _all 字段是搜索的应急之策。通过查询指定字段,你的查询更加灵活、强大,你也可以对相关性最高的搜索结果进行更细粒度的控制。
如果你不再需要 _all 字段,你可以通过下面的映射来禁用:
PUT /test
{
"mappings": {
"_all": { "enabled": false }
}
}