1.1、keyword
keyword类型是不进行切分的字符串类型。这里的“不进行切分”指的是:在索引时,对keyword类型的数据不进行切分,直接构建倒排索引;在搜索时,对该类型的查询字符串不进行切分后的模糊匹配。一般查询这种类型的数据时使用term
查询。
1.2、text
text类型是可进行切分的字符串类型。这里的“可切分”指的是:在索引时,可按照相应的切词算法对文本内容进行切分,然后构建倒排索引;在搜索时,对该类型的查询字符串按照用户的切词算法进行切分,然后对切分后的模糊匹配程度打分。一般情况下,搜索text类型的数据时应该使用match
搜索。
1.3、数值类型
ES支持的数值类型有long、integer、short、byte、double、float、half_float、scaled_float和unsigned_long等。对于数值型数据,一般使用term
搜索或范围搜索。
1.4、布尔类型
布尔类型使用boolean定义,用于表示业务中的二义性。写入或查询该类型的数据时,其值可以使用true或false,或者使用字符串类型的“true”或“false”。
1.5、时间类型
在ES中,日期类型的名称为date。ES中存储的日期是标准的UTC格式。
一般使用如下形式表示日期类型数据:
- 格式化的日期字符串
- 毫秒级的长整型,表示从1970年1月1日0点到现在的毫秒数
- 秒级别的整型,表示从1970年1月1日0点到现在的秒数
日期类型的默认格式为strict_date_optional_time
||epoch_millis
。其中strict_date_optional_time的含义为严格的时间类型,支持yyyy-MM-dd,yyyyMMdd,yyyyMMddHHmmss,yyyy-MM-ddTHH:mm:ss,yyyy-MM-ddTHH:mm:ss.SSS和yyyy-MM-ddTHH:mm:ss.SSSZ等格式,epoch_millis的含义是从1970年1月1日0点到现在的毫秒数。
日期类型默认不支持yyyy-MM-dd HH:mm:ss
格式,如果经常使用这种格式,可以在索引的mapping中设置日期字段的format属性为自定义格式。下面的示例将设置create_time字段的格式为yyyy-MM-dd HH:mm:ss
:
PUT /hotel
{
"mappings":{
"properties":{
"title":{
"type":"text"
},
"create_time":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss"
}
}
}
}