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

使用Elasticsearch在同一索引中区分不同类型的文档

在使用Elasticsearch时,有时我们需要在同一个索引中存放不同类型的文档,并且这些文档的字段可能不一致。在早期版本中,我们可以使用types来实现,但在Elasticsearch 7.x及更高版本中,types概念已被弃用。本文将介绍如何在新的版本中使用标识字段和索引别名来实现这一需求。

一、创建索引和添加映射

首先,我们需要创建一个索引,并定义映射以包含不同类型文档的字段。

PUT /my_test_index
{"mappings": {"properties": {"doc_type": { "type": "keyword" },"field1": { "type": "text" },"field2": { "type": "integer" },"fieldA": { "type": "text" },"fieldB": { "type": "date" }}}
}

参考官方文档:Mapping - Elasticsearch

二、添加文档

接下来,我们添加一些文档,并在每个文档中使用doc_type字段来标识文档类型。以下是一些包含假数据的文档示例:

POST /my_test_index/_doc/1
{"doc_type": "type1","field1": "值1","field2": 10
}POST /my_test_index/_doc/2
{"doc_type": "type2","fieldA": "值A","fieldB": "2023-06-16"
}POST /my_test_index/_doc/3
{"doc_type": "type1","field1": "值2","field2": 20
}POST /my_test_index/_doc/4
{"doc_type": "type2","fieldA": "值B","fieldB": "2023-06-17"
}

参考官方文档:Create Index - Elasticsearch

三、使用标识字段进行查询

在创建别名之前,我们可以直接使用doc_type字段进行查询:

查询类型为type1的文档:

GET /my_test_index/_search
{"query": {"term": { "doc_type": "type1" }}
}

查询类型为type2的文档:

GET /my_test_index/_search
{"query": {"term": { "doc_type": "type2" }}
}

参考官方文档:Query DSL - Elasticsearch

四、创建索引别名并添加过滤器

为了方便查询,我们可以为索引创建别名,并为别名添加过滤器,这样可以在逻辑上将一个索引分成多个“虚拟索引”。

POST /_aliases
{"actions": [{"add": {"index": "my_test_index","alias": "type1_index","filter": { "term": { "doc_type": "type1" } }}},{"add": {"index": "my_test_index","alias": "type2_index","filter": { "term": { "doc_type": "type2" } }}}]
}

参考官方文档:Index Aliases - Elasticsearch

五、查询文档

我们可以使用别名来查询不同类型的文档,这样可以有效地区分和管理不同类型的数据。

查询类型为type1的文档:

GET /type1_index/_search
{"query": {"match_all": {}}
}

查询类型为type2的文档:

GET /type2_index/_search
{"query": {"match_all": {}}
}
六、对比新的做法和老的做法

在Elasticsearch 6.x及之前版本中,我们可以使用types来区分不同类型的文档:

PUT /my_index
{"mappings": {"type1": {"properties": {"field1": { "type": "text" },"field2": { "type": "integer" }}},"type2": {"properties": {"fieldA": { "type": "text" },"fieldB": { "type": "date" }}}}
}

然而,在Elasticsearch 7.x中,types概念被移除了,推荐使用标识字段和索引别名的方式来管理和区分不同类型的文档。

老的做法: 使用多个types在同一个索引中区分文档。优点是直观且易于管理,但已被弃用。

新的做法: 使用标识字段和索引别名来管理不同类型的文档。优点是符合最新的Elasticsearch版本,灵活性更高,但需要在文档设计和查询时额外注意区分。

如果对你有帮助的话点个赞呗~

http://www.lryc.cn/news/376827.html

相关文章:

  • 驾校在线考试系统源码 手机+PC+平板自适应
  • c++的多态,继承,抽象类,虚函数表,虚函数等题目+分析
  • 利用 Qwen-VL 进行私有化部署第一个 AI 多模态大模型
  • 王思聪隐形女儿曝光
  • 学习笔记——网络管理与运维——SNMP(SNMP原理)
  • 基于STM32和人工智能的自动驾驶小车系统
  • 简单介绍vim
  • 使用本地数据对transformers模型进行微调训练
  • Java面试题:讨论何时需要创建自定义异常类,并展示如何实现一个自定义异常
  • 什么是进程
  • 电脑提示d3dcompiler_47.dll丢失的解决方法,实测靠谱的5种方法
  • SQLserver前五讲课堂笔记
  • 深度学习项目十六:根据训练好的权重文件推理图片--YOLO系列
  • 敏感信息加密操作,让开发的系统更加的安全可靠!!
  • 第四篇:精通Docker构建:Dockerfile的艺术与策略
  • Linux下Cmake安装或版本更新
  • 人工智能体验工程师面试
  • 科研——BIBM论文修改和提交
  • 【bug】配置SpringCloudAlibaba AI的maven依赖问题
  • 人工智能和机器学习的应用日益广泛,在医疗健康领域的具体应用是什么?
  • 前端:鼠标点击实现高亮特效
  • 【计算机网络体系结构】计算机网络体系结构实验-DNS模拟器实验
  • 【profinet】从站开发要点
  • 浮点数的进制转换
  • vue-饼形图-详细
  • MySQL-备份+日志:介质故障与数据库恢复
  • 嵌入式开发十八:USART串口通信实验
  • redis复习
  • SUSE linux的快照和恢复
  • 【Qt快速入门(六)】- QLineEdit按钮的使用