ES新老写法的一些对比

2.x 版本只有 string 字段,5.x 版本引入 text 和 keyword 字段,并且抛弃 string。

  • keyword:存储数据时候,不会分词建立索引
  • text:存储数据时候,会自动分词,并生成索引

新老写法对比:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 2.x 写法
{
"foo": {
"type": "string",
"index": "analyzed"
}
}
// 5.x 写法
{
"foo": {
"type": "text",
"index": true
}
}
// 2.x 写法
{
"foo": {
"type": "string",
"index": "not_analyzed"
}
}
// 5.x 写法
{
"foo": {
"type": "keyword",
"index": true
}
}

string 字段被重新定义为 textkeyword 字段. 对于上面的 index 属性, 因为在新的定义中我们不需要三种状态(在以前的 string 定义中可以是 analyzednot_analyzedno), 所以只简单的定义成了boolean值, 以告知ElasticSearch是否可在该字段上进行搜索.

1
2
3
4
5
6
7
8
curl -XPUT 'localhost:9200/test_v1/_mapping/_doc?pretty' -H 'Content-Type: application/json' -d'
{
"properties": {
"email": {
"type": "keyword"
}
}
}'