当前位置: 首页 > 面试题库 >

elasticsearch索引和关系数据库中的索引有什么区别?

秋兴思
2023-03-14
问题内容

似乎在elasticsearch中,您将在集合上定义索引,而在关系数据库中,您将在列上定义索引。如果整个集合都已建立索引,为什么需要对其进行定义?


问题答案:

不幸的是,使用了“索引”一词,这意味着ES和关系数据库中的一些事物(在编辑中非常不同),因为它们针对不同的用例进行了优化。

数据库中的“索引”是辅助数据结构,它使WHERE查询和查询变得JOIN快速,并且它们通常存储的值与表中显示的值完全相同。您仍然可以具有未建立索引的列,但随后WHERE需要进行全表扫描,这在大型表上比较慢。

ES中的“索引”实际上是文档的示意图集合,类似于关系世界中的数据库。ES中可以有不同的“类型”的文档,这与dbs中的表非常相似。ES使您可以灵活地为每个文档的字段定义是否希望对其进行检索,搜索或同时进行搜索。有关这些选项的一些详细信息,可以从例如这里找到,也与_sourcefield(提交给ES的原始JSON)有关。

ES使用反向索引来有效地找到匹配的文档,但是最重要的是,它通常将字符串“标准化”为令牌,以便可以执行准确的自由文本搜索。例如,句子可能会拆分成单个单词,单词会被标准化为小写等,以便搜索“荷兰”将与文本“2015年荷兰假期”相匹配。

如果字段没有反向索引,则无法对其进行任何搜索(与dbs的全表扫描不同)。有趣的是,您还可以定义字段,以便可以使用它们进行搜索,但不能将其取回,这在减少磁盘使用和RAM使用非常重要时非常有用。



 类似资料:
  • 问题内容: 我在这里阅读了我的问题的解释: https://discuss.elastic.co/t/whats-the-differece-between-index-pattern-and- index-template/54948 但是,我仍然不明白区别。定义索引PATTERN时,它根本不会影响索引的创建吗?另外,如果我创建索引但没有相应的索引模式,会发生什么情况?我如何查看用于索引模式的映

  • 我正在使用elasticsearch elasticsearch-rails的官方gems套件,我在试图索引父/子关系时非常困难,我不确定我的问题是在映射、索引或查询还是在所有这些方面!!所以我不会发布我的代码片段。 是否有以下完整的工作示例: 子索引和父索引的映射 子级和父级的索引/更新/删除 在两个索引上查询高级查询;这意味着我需要用'has_child'查询在父索引上搜索,也需要用'has_

  • 数据库创建索引能够大大提高系统的性能。 第一,通过创建唯一性的索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也使创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著的减少查询中查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,

  • 基本概念 在数据库中,索引的含义与日常意义上的“索引”一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象。 索引可以避免全表扫描。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页。 对于非聚集索引,有些查询甚至可以不访问数据页。 聚集索引可以避免数据插入操作集中于表的最后一个数据页。 一些情况下,索引还可用于避免排序操作。 索引的存储 一条索引记录中包含的

  • 问题内容: Elasticsearch中的索引是什么?一个应用程序有多个索引还是只有一个索引?假设您为某些汽车制造商构建了一个系统。它涉及人员,汽车,零件等。您是否有一个名为制造商的索引,或者您有一个人的索引,一个用于汽车的索引和一个用于零备件的索引?有人可以解释吗? 问题答案: 很好的问题,答案比人们期望的要细腻得多。您可以将索引用于几种不同的目的。 关系指标 最简单,最熟悉的布局将克隆您从关系

  • 如果不需要打开shell执行create index,直接在程序源代码里就能指定数据库索引,是不是很酷? 是的,利用bugu-mongo,你只需在程序里加上个@EnsureIndex注解,即可实现该功能。 以一个简单的新闻系统为例: @Entity @EnsureIndex("{type:1}") public class News implements BuguEntity{ @Id