【发布时间】:2014-01-06 04:49:23
【问题描述】:
我正在学习弹性搜索,还有很多我没有得到,但我无法弄清楚(或找到所有这些)的一件事是什么时候使用一个索引,什么时候使用更多.部分原因是我绝对不明白弹性搜索索引究竟是什么是。
您能解释一下什么是弹性搜索索引,什么时候应该只对所有数据使用一个索引,什么时候应该将数据拆分为多个索引?
加分/或者,我如何知道何时需要将数据拆分为多个索引,然后,我应该如何决定如何在新索引中拆分数据?
【问题讨论】:
我正在学习弹性搜索,还有很多我没有得到,但我无法弄清楚(或找到所有这些)的一件事是什么时候使用一个索引,什么时候使用更多.部分原因是我绝对不明白弹性搜索索引究竟是什么是。
您能解释一下什么是弹性搜索索引,什么时候应该只对所有数据使用一个索引,什么时候应该将数据拆分为多个索引?
加分/或者,我如何知道何时需要将数据拆分为多个索引,然后,我应该如何决定如何在新索引中拆分数据?
【问题讨论】:
您可以将其视为 SQL 数据库中的 Schema。
Schema 包含给定用例的数据。索引保存用例的数据。
很酷的是,可以在一个请求中对多个索引进行搜索。
如果没有有关用例的任何信息,很难告诉您更多信息。 这取决于许多因素:您是否需要在一段时间后删除一些数据(比如说每年)?您将索引多少文档以及文档的大小?
例如,假设您要索引日志并保持在线 3 个月的日志。您将基本上每月创建一个索引,并在当前 3 个月份之上创建一个别名。
当一个月结束时,为新的月份创建一个新索引,修改别名并删除旧索引。删除索引可以提高性能并节省磁盘空间!
所以基本上在这种情况下,我建议使用多个索引。
想象另一种情况。假设您正在推出一款游戏,但您不知道自己是否会成功。所以从一个只有一个分片的 index1 开始,并在它上面创建一个别名索引。你启动游戏,你会发现你需要更多的力量(更多的机器),因为你的响应时间正在急剧增加。创建一个包含两个分片的新索引 index2 并将其添加到您的别名索引中。
这样您就可以轻松扩展。
这里的关键点是恕我直言别名。从项目开始使用别名进行搜索。以后会对你有很大的帮助。
另一个用例可能是您为不同的客户工作。客户不希望他们的数据与其他客户混合。那么在这种情况下您可能需要为每个客户创建一个索引吗?
事实上,elasticsearch 非常灵活,可以帮助您根据需要设计架构。
希望这会有所帮助。
【讨论】:
elasticsearch 中最大的单个数据单元是index。索引是 elasticsearch 中文档的逻辑和物理分区。
Elasticsearch indexes 与关系世界中的 database 抽象最相似。 elasticsearch index 是一个完全分区的 Universe,位于单个运行的服务器实例中。文档和类型映射按index 限定范围,从而可以安全地在indexes 中重复使用名称和ID。对于集群复制、分片、自定义文本分析和许多其他问题,索引也有自己的设置。
【讨论】:
索引是ElasticSearch的主要数据存储单元。
有几种类型的数据存储技术:
分区: 假设您有一个不断增长和增长永不停止的索引。 (即 fb/twitter 数据或任何类型的日志记录)。将这些类型的数据分区数据存储到多个索引中的最佳方法。常见的方法是使用时间间隔。时间间隔可能会有所不同。它可以是每月、每周、每天。然后当你得到一个新数据时,检查时间戳并移动到相应的索引。
无分区: 如果您的索引没有增长得那么快,您可以使用单个索引。这对小表很有用。
在探索 Elastic Search 时,您可以学习多种管理数据的方法。
【讨论】: