elasticsearch 弹性搜索索引和关系数据库中的索引有什么区别?,elasticsearch,indexing,relational-database,elasticsearch,Indexing,Relational Database" /> elasticsearch 弹性搜索索引和关系数据库中的索引有什么区别?,elasticsearch,indexing,relational-database,elasticsearch,Indexing,Relational Database" />

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

elasticsearch 弹性搜索索引和关系数据库中的索引有什么区别?,elasticsearch,indexing,relational-database,elasticsearch,Indexing,Relational Database,似乎在弹性搜索中,您将在集合上定义索引,而在关系数据库中,您将在列上定义索引。如果整个集合都编制了索引,为什么需要定义它?弹性搜索从设计上看,对于SQL server或Mongo DB等主存储,不太可能首选搜索引擎 为什么要为整个集合编制索引? 弹性搜索在内部使用一种称为反向索引的结构,该结构存储每个字段(列)的搜索值。 如果字段包含字符串,它将标记它,并执行诸如小写或大写等过滤 无论如何,您只能找到反向索引中可用的数据。 因此,默认情况下,弹性搜索对所有字段执行索引,使其对您可用/可搜索 这

似乎在弹性搜索中,您将在集合上定义索引,而在关系数据库中,您将在列上定义索引。如果整个集合都编制了索引,为什么需要定义它?

弹性搜索从设计上看,对于SQL server或Mongo DB等主存储,不太可能首选搜索引擎

为什么要为整个集合编制索引?

弹性搜索在内部使用一种称为反向索引的结构,该结构存储每个字段(列)的搜索值。 如果字段包含字符串,它将标记它,并执行诸如小写或大写等过滤

无论如何,您只能找到反向索引中可用的数据。 因此,默认情况下,弹性搜索对所有字段执行索引,使其对您可用/可搜索

这与为关系数据库添加索引不同。 在关系数据库中,您拥有所有可用的数据,那么您需要的是索引最常用的列,以便更快地查找。
但查找包含给定单词一部分的所有行(搜索单词)的效率较低。

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

数据库中的“索引”是一种二级数据结构,它使
WHERE
查询和
JOIN
快速,并且它们通常存储的值与表中显示的值完全相同。您仍然可以有未编入索引的列,但是
其中
s需要一个在大型表上速度较慢的索引

ES中的“索引”实际上是文档的示意图集合,类似于关系世界中的数据库。ES中可以有不同的“类型”文档,与dbs中的表非常相似。ES为您提供了为每个文档的字段定义的灵活性,无论您希望能够检索它、按它进行搜索还是两者兼而有之。有关这些选项的一些详细信息可以从中找到,例如,还与
\u source
字段(提交给ES的原始JSON)相关

ES使用反向索引高效地查找匹配文档,但最重要的是,它通常将字符串“规范化”为标记,以便可以执行准确的自由文本搜索。例如,可以将句子拆分为单独的单词,将单词规范化为小写等,以便搜索“holland”与文本“holland度假2015”匹配

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

我将参考:

“在弹性搜索中,您似乎会在 收藏“

在Elasticsearch中,索引就像关系世界中的数据库。 索引包含多个文档,就像关系数据库包含表一样

到目前为止,这是非常清楚的

为了管理大量数据,Elasticsearch(本质上是一个分布式数据库)将每个索引分成更小的块,称为碎片,这些碎片分布在Elasticsearch节点上

混淆始于碎片是基于库的数据结构这一事实。
ApacheLucene的索引属于称为反向索引的索引系列

它被称为“反向索引”,因为它列出了一个术语,即包含该术语的文档:

Term           Document                 Frequency
Brasil         doc_id_1, doc_id_8       4 (2 in doc_id_1, 2 in doc_id_8)
Argentina      doc_id_1, doc_id_6       3 (2 in doc_id_1, 1 in doc_id_6)
因此,正如您在上面所看到的,这个结构存储有关术语的统计信息(频率),以便使基于术语的搜索更有效

(*)这是自然关系的反向
(术语->文档)
,其中文档列出术语
(文档->术语)


摘要:

1)弹性搜索索引:
“索引”一词有两种不同的用法。
一种是简单的索引,索引就像一个数据库。
另一个令人困惑——碎片是基于一个名为“反向索引”的数据结构

2)关系数据库索引:

一种与表或视图关联的结构,可加快从表或视图检索行的速度。

在弹性映射中,您可以指定如何对每个字段进行索引(标记化、小写/大写/存储…)。索引有点像SQL数据库,类型类似于表?索引没有您所说的关系链接。弹性索引包含文档(类似sql表的行)。文档中有一些字段(sql表的列),您不使用弹性字段,因为您将使用sql数据库。弹性返回JSON数据。对于纯文本查询,它也非常快速。例如,查找与给定单词的一部分相关的所有文档。另一个非常强大的特性是聚合。