当前位置: 首页 > news >正文

es中的数据类型

字符串

文本(Text)
  1. 作用:适用于全文搜索的文本字段,例如文章内容、电子邮件正文、产品描述等长文本。
  2. 特点:ES会对文本内容进行分词处理,将字符串转换为单个术语的列表,支持全文搜索和模糊查询。但通常不用于排序或聚合
  3. 示例代码:
PUT /my_index
{"mappings": {"properties": {"description": {"type": "text","analyzer": "standard"}}}
}
我有一辆汽车
我有
一辆汽车
汽车
车
我
关键字(Keyword)
  1. 作用:适用于精确匹配的字段,例如名称、标签、用户ID、电子邮件地址、状态码等短文本。
  2. 特点:不会对字段内容进行分词处理,直接构建倒排索引,适合精确查询、过滤、排序和聚合操作
  3. 示例代码:
PUT /my_index
{"mappings": {"properties": {"email": {"type": "keyword"}}}
}
Text和Keyword类型比较
  1. 存储方式:Text类型字段会被分析器处理,分解成词元并存储在倒排索引中;Keyword类型字段则保持原样存储。
  2. 搜索方式:Text类型支持全文搜索,包括模糊查询和前缀查询;Keyword类型支持精确匹配和聚合。
  3. 使用场景:Text类型适用于搜索和分析非结构化文本;Keyword类型适用于存储需要精确检索的结构化数据。
  4. 性能考虑:Text类型由于需要经过分析器处理,可能会占用更多的资源;Keyword类型查询性能更高,但不支持全文搜索。

整数(Integer)

  1. 作用:适用于存储32位有符号整数,如年龄、评分等。
  2. 示例代码:
PUT /my_index
{"mappings": {"properties": {"age": {"type": "integer"}}}
}

长整数(Long)

  1. 作用:适用于存储64位有符号整数,如大型计数器、用户ID等。
  2. 示例代码:
PUT /my_index
{"mappings": {"properties": {"user_id": {"type": "long"}}}
}

浮点数(Float)

  1. 作用:适用于存储32位单精度浮点数,如价格、温度等。
  2. 示例代码:
PUT /my_index
{"mappings": {"properties": {"price": {"type": "float"}}}
}

双精度浮点数(Double)

  1. 作用:适用于存储64位双精度浮点数,如科学计算结果。
  2. 示例代码:
PUT /my_index
{"mappings": {"properties": {"result": {"type": "double"}}}
}

日期(Date)

  1. 作用:适用于存储日期和时间,如日志时间戳、事件日期等。
  2. 示例代码:
PUT /my_index
{"mappings": {"properties": {"created_at": {"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"}}}
}

布尔(Boolean)

  1. 作用:适用于存储布尔值true、false,如开关状态、是否可用等。
  2. 示例代码:
PUT /my_index
{"mappings": {"properties": {"is_active": {"type": "boolean"}}}
}

二进制(Binary)

  1. 作用:用于存储Base64编码的二进制数据,如文件、图片等。
  2. 注意事项:二进制字段不适用于搜索,主要用于存储原始数据。
  3. 示例代码:
PUT /my_index
{"mappings": {"properties": {"file": {"type": "binary"}}}
}

范围类型(Range Types)

  1. 作用:用于存储数值范围,如年龄范围、价格区间等。
  2. 示例代码:
PUT /my_index
{"mappings": {"properties": {"age_range": {"type": "integer_range"}}}
}

对象(Object)

  1. 作用:用于存储结构化或半结构化数据,如用户信息、配置项等。
  2. 注意事项:对象类型字段在Elasticsearch 6.x及以后版本中已被弃用,建议使用嵌套对象(Nested Object)或多字段(Multi-Field)。
  3. 示例代码:
PUT /my_index
{"mappings": {"properties": {"user": {"type": "object","enabled": false}}}
}

嵌套对象(Nested Object)

  1. 作用:用于存储嵌套结构的数据,例如包含数组对象的场景(订单中的多个商品项)。
  2. 注意事项:嵌套对象查询性能较低,应谨慎使用。
  3. 示例代码:
PUT /my_index
{"mappings": {"properties": {"orders": {"type": "nested","properties": {"product_name": { "type": "text" },"price": { "type": "double" }}}}}
}
  1. nested 类型的特点:
  • 独立性:数组中的每个对象都是独立的,查询条件不会跨对象匹配。
  • 查询方式:必须使用 nested 查询来访问嵌套对象的字段。
  • 更新限制:更新嵌套对象时,必须重新索引整个文档。
  • 性能考量:嵌套文档会增加索引大小和查询复杂度,应合理使用。
  1. 适用场景
  • 处理对象数组,且需要在同一个对象内进行多条件匹配。
  • 如电商产品的评论列表(每条评论有作者、内容、评分等字段)。
  • 如文章的标签列表(每个标签有名称、权重等属性)。
  1. nested和object的区别:当有一个字段包含对象数组时,默认的 object 类型会将这些对象 “扁平化” 处理,可能导致查询结果不符合预期,而 nested 类型则会保留数组中每个对象的独立性。

假设有这样的文档结构:

{"group": "fans","user": [{"first": "John", "last": "Smith"},{"first": "Alice", "last": "White"}]
}

如果 user 字段使用默认的 object 类型,Elasticsearch 会将其内部结构扁平化处理为:

user.first: ["John", "Alice"]
user.last: ["Smith", "White"]

这种情况下,如果你查询 user.first: John AND user.last: White,会错误地匹配到这个文档(因为扁平化后两个条件会跨对象匹配)。

而使用 nested 类型,每个对象会被视为独立的文档,确保查询条件只会在同一个对象内匹配。

定义 nested 类型映射

PUT my_index
{"mappings": {"properties": {"group": { "type": "keyword" },"user": {"type": "nested",  // 定义为nested类型"properties": {"first": { "type": "text" },"last": { "type": "text" }}}}}
}

定义 nested 类型字段

GET my_index/_search
{"query": {"nested": {"path": "user",  // 指定nested字段的路径"query": {"bool": {"must": [{ "match": { "user.first": "John" } },{ "match": { "user.last": "Smith" } }]}},"inner_hits": {  // 可选,返回匹配的嵌套对象"highlight": {"fields": {"user.first": {}}}}}}
}

多字段(Multi-Field)

  1. 作用:允许一个字段使用不同的类型进行索引,适用于需要同时进行全文搜索和精确匹配的场景。
  2. 注意事项:多字段可以提高查询的灵活性,但会占用更多的存储空间。
  3. 示例代码:
PUT /my_index
{"mappings": {"properties": {"full_name": {"type": "text","fields": {"raw": { "type": "keyword" }}}}}
}

IP地址(IP)

  1. 作用:用于存储IP地址,如访问日志中的客户端IP。
  2. 注意事项:IP地址类型支持IP地址的查询和聚合。
  3. 示例代码:
PUT /my_index
{"mappings": {"properties": {"ip_address": {"type": "ip"}}}
}

完成(Completion)

  1. 作用:用于自动完成建议,如搜索引擎的自动补全功能。
  2. 示例代码:
PUT /my_index
{"mappings": {"properties": {"suggest": {"type": "completion"}}}
}

地理位置点(Geo-point)

  1. 作用:用于存储地理位置点,如用户的地理位置信息。
  2. 注意事项:地理位置点类型支持基于地理位置的查询和聚合。
  3. 示例代码:
PUT /my_index
{"mappings": {"properties": {"location": {"type": "geo_point"}}}
}

地理位置形状(Geo-shape)

  1. 作用:用于存储地理空间形状,如国家边界、城市区域等。
  2. 注意事项:地理形状类型支持复杂的地理空间查询。
  3. 示例代码:
PUT /my_index
{"mappings": {"properties": {"shape": {"type": "geo_shape"}}}
}
http://www.hskmm.com/?act=detail&tid=10565

相关文章:

  • 防御安全播客第214期:数据泄露与漏洞攻防实战
  • windows使用kibana
  • 03作业
  • 软工作业个人项目
  • YOLO进阶提升 5标注与配置
  • rapidxml中接口函数
  • YOLO进阶提升 6模型训练与测试
  • YOLO进阶提升 4训练准备与数据处理
  • windows安装elasticsearch
  • YOLO进阶提升 5标注与配置补充
  • YOLO进阶提升 3YOLOv4 改进
  • 解码C语言位字段
  • Sql Server 多层嵌套事务的执行结果
  • 面向对象
  • es入门
  • YOLO进阶提升 1YOLOv2 改进
  • C# Avalonia 15- Animation- AnimationPlayerTest
  • 基于Python+Vue开发的体育场馆预约管理系统源码+运行步骤
  • JSONArray集合根据某个字段查询对象
  • 详细介绍:Parasoft C/C++test 针对嵌入式开发的内存错误检测解决方案
  • [WC2006] 水管局长
  • 02-Media-7-uvc.py 应用软件解码的USB摄像头(UVC)捕获视频并显示的程序
  • YOLO入门理解 3YOLOv1 思路与细节
  • YOLO入门理解 评估指标
  • 清除win+r“运行”对话框中的历史记录
  • [ICPC 2024 Yokohama R] Peculiar Protocol
  • YOLO入门理解 基础概念
  • The 2025 ICPC Asia East Continent Online Contest (II)(C,D,E,H,I)
  • 2022年十大Web黑客技术提名开启
  • 13. LangChain4j + 加入检索增加生成 RAG(知识库) - Rainbow