@xtccc
2018-08-04T09:50:29.000000Z
字数 1655
阅读 2244
ElasticSearch
field的类型有三种
Core
String : 例如 "Lee", "Elasticsearch Denver"
Numeric : 例如 17, 3.2
Date : 例如 2013-03-15T10:02:26.231+1:00
Boolean : 例如 true, false
Arrays and multi fields
_ttl
和 timestamp
每个文档属于一个type,type属于index。在index新文档时,ES会自动地检测并调整相应type的mapping。
Types contain a definition of each field in the mapping. The mapping includes all the fields that might appear in documents from that type and tells Elasticsearch how to index the fields in a document. Elasticsearch detects your fields automatically and adjusts your mapping accordingly.
$ curl -XPUT 'ecs1:9200/get-together/new-event/1?pretty' -d '
> {
> "name" : "Last Night With ES",
> "date" : "2015-12-09T14:57"
> }'
首先向Index一个新的文档(并借此自动地创建相应的type),然后获取该type的mapping。
$ curl 'ecs1:9200/get-together/new-event/_mapping?pretty'
{
"get-together" : {
"mappings" : {
"new-event" : {
"properties" : {
"date" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"name" : {
"type" : "string"
}
}
}
}
}
}
下面,我们创建一个名为event-1的type,并为其定义了2个field type,如下:
curl -XPUT 'ecs1:9200/get-together/event-1/_mapping' -d '
> {
> "event-1" : {
> "properties" : {
> "date" : {
> "type" : "date",
> "format" : "dateOptionalTime"
> },
> "name" : {
> "type" : "string"
> }
> }
> }
> }'
当将一个新的mapping加入到已有的type时,ES会将这两个mapping合并(merge)起来。
新的field会被加入到已有mapping中;
不能改变mapping中已有field的类型
假如某个文档中存在内容"hello world, I am coming with money!"。那么,如果我们的查询内容是"WORLD",这个文档会被查询出来。因为文档内容已经被分析(analyse)过了,具体而言,analyzer通常会对string类型的文档内容进行如下的分析:
- 将所有的字母转变为小写
- 将string切分为words
- 去除停用词
可以在mapping中对analysis相关的选项进行设置
在为某个type创建mapping时,可以对index
这个选项进行配置,如下:
该选项有三种值: