4.数据类型

Elasticsearch 常见的数据类型有哪些? 

常见类型:

  关键词: keyword constant_keyword wildcard
  数值型: long , integer , short , byte , double
  布尔型: boolean 
  日期型: date
  二进制: binary

结构化数据类型:

  范围型: integer_range , float_range , long_range , double_range
  ip 地址类型 ip
  软件版本 version

文字搜索类型:

  非结构化文本 text
  包含特殊标记的文本: annotated-text
  自动完成建议: completion

对象和关系类型:

  嵌套类型: nested join
  对象类型 object flattened

空间类型:

  地理坐标类型 geo_point
  地理形状类型 geo_shape

 

keyword  text 有什么区别?

  keyword 不走分词器,而 text 会走分词器,使用keyword 关键字查询效率更高,一般在fields 中定keyword 类型字段

 

Elasticsearch 是否有数组类型?

  在 Elasticsearch 中,没有专门的数组数据类型。默认情况下,任何字段都可以包含零个或多个值,但是,数组中的所有值必须具有相同的数据类型。

Elasticsearch 怎么修改索引字段类型?

  1、获取源索引的数据(mapping) 并创建临时索引:data_index_temp,
  2、备份数据到临时索引:data_index_temp
  3、删除原索引: data_index,
  4、重新创建正确数据类型索引:data_index
  5、再把临时索引:data_index_temp的数据备份到新创建索引 data_index。
以上语句通过kibana的 dev_tools/console 执行。


可以在 Mapping 中直接修改字段类型吗?

  不可以Elasticsearch 中的 Mapping 有点类似于数据库中的表结构定义,Mapping 中的字段类型只能增加不能修改,否则只能reindex 重新索引或者重新进行数据建模并导入数据。

 

什么是 Nested 数据类型?有什么用?

Elasticsearch 官方文档是这样介绍 Nested 数据类型的:

  Nested (嵌套)类型是对象数据类型的特殊版本,它允许对象数组以一种可以相互独立查询的方式进行索引。

  Nested 数据类型可以避免 数组扁平化处理,多个数组的字段会做一个笛卡尔积,导致查询出不存在的数据。

// 会导致查询John White也会匹配,将类型改为nested问题解决
PUT my_index/_doc/1
{
    "group" : "fans",
    "user" : [
      {
          "first" : "John",
          "last" : "Smith"
      },
      {
          "first" : "Alice",
          "last" : "White"
      }
    ]
}        

将多个字段值合并为一个字段怎么做?

  使用 ,比如将 first_name  last_name 合并为 full_name ,但 full_name 不在查询结果中展示

PUT my_index 1
{
    "mappings": {
        "properties": {
            "first_name": {
                "type": "text",
                "copy_to": "full_name"
            },
            "last_name": {
                "type": "text",
                "copy_to": "full_name"
            },
            "full_name": {
                "type": "text"
            }
        }
    }
}                                

 

posted @ 2024-03-21 15:42  壹索007  阅读(3)  评论(0编辑  收藏  举报