7.3-elasticsearch索引字段类型详情

binary类型

binary类型存储字符串base64处理之后的值

date类型

json格式没有date类型,ES中表示date类型的有以下三种:
1)、字符串格式,如’2020-01-01’或’2020/05/26 09:45:00’;
2)、long类型数值,表示从毫秒开始的计数;
3)、integer类型数值,表示从秒开始的计数;

内部date会转换成UTC时间并以毫秒表示其值;
日期查询会在内部转换为long类型形式的范围查询,并且聚合和存储字段的结果将转换为字符串(具体取决于该字段的日期转换格式);
日期将始终以字符串形式呈现,即使一开始在JSON文档中提供的类型为long;

//date类型字段定义
PUT /date_index_demo
{
   
  "mappings": {
   
    "properties": {
   
      "date":{
   
        "type": "date"
      }
    }
  }
}

PUT /date_index_demo/_doc/1
{
   
  "date":"2020-01-01"
}

PUT /date_index_demo/_doc/2
{
   
  "date":"2020-01-01T12:00:00Z"
}

PUT /date_index_demo/_doc/3
{
   
  "date":"2020-01-01T12:00:00"
}

PUT /date_index_demo/_doc/4
{
   
  "date":1420070400001
}

//排序查询,内部会转为long类型进行处理
GET /date_index_demo/_search
{
   
  "sort": [
    {
   
      "date": {
   
        "order": "asc"
      }
    }
  ]
}

日期的多种格式化形式
可以使用||分隔符指定多种日期格式,es会依次尝试每种格式,直到找到匹配的格式,将日期格式转换成字符串会优先使用第一种格式转化;

PUT /date_index_demo
{
   
  "mappings": {
   
    "properties": {
   
      "date":{
   
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"
      }
    }
  }
}
join类型

存在的约束:
1)、一个索引当中仅允许一个join类型的映射;
2)、父文档与子文档一定要在同一个分片之上,这就意味着在做get/delete/update操作的时候需要指定相同的routing值;
3)、一个元素可以有多个子级,只允许有一个父级;
4)、允许在join类型的字段上添加一个新的关系;
5)、允许在一个元素中添加一个子级(要求元素需要存在父级);

使用父级join查询

父级join查询及聚合操作
参考has_child和has_parent查询,children聚合及inner hits;
join标识字段可以使用聚合和脚本查询,也可以使用parent_id查询;

同一父级对应多个子级

keyword类型

针对类似于ID、邮箱、域名、状态、邮政编码和标签之类的表示字段,在查询操作时以精确值作为条件,同时可作为排序和聚合操作;
如果针对文本内容做全文索引,使用text字段表示更合适;
数值数据不一定需要用数值类型来表示,若不用于range查询则可以使用keyword代替,因为keyword类型字段针对term或term-level的查询更加友好;
考虑将字段设置成keyword类型可考虑以下因素:
1)、针对该字段有没有range操作的需求;
2)、查询效率上的考虑,因为字段类型为keyword相比数值类型效率更高;

nested类型

nested类型是object类型的一种特殊形式,其允许对象数组被索引且可以独立进行查询;
es没

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值