美文网首页
es常用字段类型

es常用字段类型

作者: 奋斗的韭菜汪 | 来源:发表于2020-10-14 00:26 被阅读0次

text:
按规则分词,至少分词1个词,做全文检索(不要存放空值,会导致性能浪费)
默认分词器standard
应用场景:用于分词检索场景
keyword:
不分词,仅仅一个词,查询效率高,早期没有这个类型,用String代替,通过属性设置
应用场景:固定文本,无需全文检索,如姓名,省,商品类目
整数:Long(64bit)、Integer(32bit、21亿)、short(16bit)、Byte(8bit)
浮点:Double 、Float 、Half Float 、Scaled float(缩放浮点类型,解决浮点类型计算精度的错误问题)
Scaled float,原理基于long去实现的,需要指定scaling_factor

POST alibaba-company-001/_doc/02
{
  "mappings": {
    "properties": {
      "income": {
        "type": "scaled_float",
        "scaling_factor": 100
      },
      "outcome":{
        "type": "scaled_float",
        "scaling_factor": 100
      }
    }
  }
}

日期类型 date
日期格式化 format,建议使用UTC时间格式,因为时区问题可能导致查询失败

PUT alibaba-company-001/_doc/02
{
  "mappings": {
    "properties": {
      "createDate":{
        "type": "date"
      },
      "regTime":{
        "type": "date",
        "format": "yy-MM-dd'T'HH:mm:ss.SSS"
      }
    }
  }
}

字符类型算法原理:
Text、keyword 倒排索引
数值类型算法原理:
整型、浮点、日期类型
BKD树算法,底层存储压缩
复合字段类型
object:json对象形式,可嵌套多种子对象
Mapping映射(类似于关系型数据库中的schema,用来描述表的结构)
_source: enable:true false
dynamic : true false strict
range:(BKD树算法)
"gte"大于,"lte"小于,整型范围、浮点范围、日期范围、ip范围
field_detect:字段类型自动检测,默认开启
字段数量限制:1000个
对象字段深度限制:20,建议最多3存
特殊类型
关联字段类型:join父子类型
定义:数据存在父子关系,一条数据可以有多条子数据,一条子数据仅有一条父数据

DELETE alibaba-company-001
PUT alibaba-company-001
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 3
  }, 
  "mappings": {
    "properties": {
      "companyID":{
        "type": "integer"
      },
      "companyName":{
        "type": "keyword"
      },
      "join_father_child":{
        "type": "join",
        "relations":{
          "baba":"erzi"
        }
      }
    }
  }
}
#父子关系必须在同一个分片routing=2
PUT alibaba-company-001/_doc/1?routing=2
{
  "companyID":6,
  "companyName":"alibaba",
  "join_father_child":{
    "name":"baba"
  }
}
PUT alibaba-company-001/_doc/2?routing=2
{
  "companyID":8,
  "companyName":"cainiao",
  "join_father_child":{
    "name":"erzi",
    "parent":"1"
  }
}
PUT alibaba-company-001/_doc/3?routing=2
{
  "companyID":9,
  "companyName":"tianmao",
  "join_father_child":{
    "name":"erzi",
    "parent":"1"
  }
}
#由父节点查子节点
GET alibaba-company-001/_search
{
  "query": {
    "parent_id":{
      "type":"erzi",
      "id":1
    }
  }
}
#由子节点查父节点
GET alibaba-company-001/_search
{
  "query": {
    "has_child":{
      "type":"erzi",
      "query": {
        "match_all": {}
      }
    }
  }
}

nested:嵌套
错误查询示例

DELETE alibaba-company-001
PUT alibaba-company-001
{
  "mappings": {
    "properties": {
      "companyName":{
        "type": "text"
      },
      "area":{
        "properties": {
          "province":{
            "type":"keyword"
          },
          "city":{
            "type":"keyword"
          }
        }
      }
    }
  }
}

PUT alibaba-company-001/_doc/1
{
  "companyName":"alibaba",
  "area":[
    {
      "province":"zj",
      "city":"hz"
    },
    {
      "province":"sh",
      "city":"pd"
    }
    ]
}

GET alibaba-company-001/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "area.province": {
              "value": "zj"
            }
          }
        },
        {
          "term": {
            "area.city": {
              "value": "pd"
            }
          }
        }
      ]
    }
  }
}
查询结果:查询浙江省下浦东的公司
{
  "took" : 9,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.723315,
    "hits" : [
      {
        "_index" : "alibaba-company-001",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.723315,
        "_source" : {
          "companyName" : "alibaba",
          "area" : [
            {
              "province" : "zj",
              "city" : "hz"
            },
            {
              "province" : "sh",
              "city" : "pd"
            }
          ]
        }
      }
    ]
  }
}

正确查询示例:

DELETE alibaba-company-001
PUT alibaba-company-001
{
  "mappings": {
    "properties": {
      "companyName":{
        "type": "text"
      },
      "area":{
        "type": "nested", 
        "properties": {
          "province":{
            "type":"keyword"
          },
          "city":{
            "type":"keyword"
          }
        }
      }
    }
  }
}

PUT alibaba-company-001/_doc/1
{
  "companyName":"alibaba",
  "area":[
    {
      "province":"zj",
      "city":"hz"
    },
    {
      "province":"sh",
      "city":"pd"
    }
    ]
}

GET alibaba-company-001/_search
{
  "query": {
    "nested": {
      "path": "area",
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "area.province": {
                  "value": "zj"
                }
              }
            },
            {
              "term": {
                "area.city": {
                  "value": "pd"
                }
              }
            }
          ]
        }
      }
    }

  }
}
查询结果:
{
  "took" : 49,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

alias:别名
flattened:平铺(对象object类型的一种改进,对象object类型可以动态扩展多个字段,fattend就当成一个字段,且保证原来的json格式),使用场景:日志领域
constant_keyword:固定值,不可以被修改,应用场景:数据的版本号等
Multi_fileds:多字段类型,可设计为多种类型,
高级数据字段类型:
geo_point:地理位置
geo_shape:地理图形(应用:在地图上画一个区域,在区域内进行检索)
shape:多边图形应用(2D平面类型检索,支持多边形)
特殊行业字段:网络地址,直方图类型,词项统计,自动完成类型

相关文章

  • ES入门研究

    什么是ES ES拿来做什么用? ES常用的映射类型 文本字段 文本字符串包括text和keyword两种类型: 1...

  • Elasticsearch 字段类型

    在学习 ES 文档相关操作之前,我们先学习 ES 中常用的字段类型。 1、text 当一个字段的内容需要被全文检索...

  • es常用字段类型

    text:按规则分词,至少分词1个词,做全文检索(不要存放空值,会导致性能浪费)默认分词器standard应用场景...

  • ES字段类型

    nested 与 object 的区别 object 类型的字段,其 JSON 格式的文档中的成员如果是数组,那么...

  • sqlalchemy的基本字段

    1、基本字段 常用的SQLAlchemy字段类型 类型名python中类型说明Integerint普通整数,一般是...

  • ES 常见操作

    设置ES字段的默认类型: ``` PUT _template/xt { "order": 11, "ind...

  • Flask中常见的SQLAlchemy字段类型和列、关系选项

    常用的 SQLAlchemy 字段类型 常用的 SQLAlchemy 列选项 常用的 SQLAlchemy 关系选...

  • SQL基本语法

    1、字段类型(常用) int、integer 大整型floatdoubledatecharvarchar 2、...

  • ES查看分词结果|es字段类型修改|ES常用命令

    查看分词结果 sort脚本排序 修改mapping中的字段类型 此处示例index为:youdu(已存在) you...

  • ES 字段类型Field type

    1 核心数据类型 通过elasticsearch-head 创建一个索引 index_field 用于功能测试。...

网友评论

      本文标题:es常用字段类型

      本文链接:https://www.haomeiwen.com/subject/htrupktx.html