似乎在弹性搜索中,您将在集合上定义索引,而在关系数据库中,您将在列上定义索引。如果整个集合都建立了索引,为什么还需要定义它?
不幸的是,“索引”一词在 ES 和关系数据库中的含义略有不同(编辑:非常),因为它们针对不同的用例进行了优化。
数据库中的“索引”是一种辅助数据结构,它使得WHERE
查询和JOIN
速度很快,而且它们通常存储的值与表中显示的值完全相同。您仍然可以拥有未索引的列,但是WHERE
需要一个全表扫描 https://en.wikipedia.org/wiki/Full_table_scan这在大桌子上很慢。
ES中的“索引”实际上是文档的示意性集合,类似于关系世界中的数据库。 ES 中可以有不同“类型”的文档,与 dbs 中的表非常相似。 ES 使您可以灵活地定义每个文档的字段,无论您希望能够检索它、通过它进行搜索还是两者兼而有之。有关这些选项的一些详细信息可以从例如here https://stackoverflow.com/questions/17103047/why-do-i-need-storeyes-in-elasticsearch,也与_source
字段(提交给ES的原始JSON)。
ES 使用倒排索引来有效地查找匹配文档,但最重要的是,它通常将字符串“规范化”为标记,以便可以执行准确的自由文本搜索。例如,句子可能会被分割成单独的单词,单词会被标准化为小写等,以便搜索“holland”将匹配文本“Vacation at Holland 2015”。
如果某个字段没有倒排索引,则无法对其进行任何搜索(与 dbs 的全表扫描不同)。有趣的是,您还可以定义字段,以便可以使用它们进行搜索,但无法检索它们,这在最小化磁盘和 RAM 使用量很重要时非常有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)