_all 字段
_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
字段进行搜索。
Tip
| 在刚开始开发一个应用时,_all 字段是一个很实用的特性。之后,你会发现如果搜索时用指定字段来代替 _all 字段,将会更好控制搜索结果。当_all 字段不再有用的时候,可以将它置为失效,正如在 [all-field] 中所解释的。 |