ElasticSearch 如何处理包含 230m 个条目的索引?

How does ElasticSearch handle an index with 230m entries?

我在浏览 elasticsearch 时注意到您可以创建索引并批量添加项目。我目前有一系列包含 2.2 亿个条目的平面文件。我正在使用 Logstash 来解析并将它们添加到 ElasticSearch,但我觉得它存在于 1 个索引下很难查询。行数据最多无非就是1-3个属性

Elasticsearch 在这种情况下如何运作?为了有效地查询这个索引,你是否只是向集群添加额外的实例,它们将一起工作来处理集合?

我一直在浏览文档,它解释了要做什么,但不一定一直解释为什么要这样做。

In order to effectively query this index, do you just add additional instances to the cluster and they will work together to crunch the set?

这正是您需要做的。通常这是一个迭代过程:

  1. 首先放入数据的子集。如果时间和成本允许,您也可以放入所有数据。
  2. 在其上放置一些尽可能接近生产条件的搜索负载,例如通过打开您计划使用的任何搜索集成。如果您打算只手动发出查询,现在是时候尝试它们并衡量它们的速度和结果的相关性了。
  3. 查看查询是否特别慢以及它们的结果是否足够相关。您更改您正在使用的索引映射或查询以获得更快的结果,并且确实向您的集群添加了更多节点。

既然你提到了 Logstash,有几件事可能会进一步帮助你:

  • 查看 Filebeat 以持续索引数据。您可能不需要自己完成读取文件和批量索引的工作。
  • 如果它是日志或类似日志的数据,并且您最感兴趣的是最近的结果,按日期和时间拆分数据可能会快得多(例如 index-2019-08-11、index -2019-08-12,索引-2019-08-13)。请参阅 Index Lifecycle Management 功能以自动执行此操作。
  • 尝试在您的映射中适当地使用 Keyword field type。它会停止对该字段的分析,阻止您在该字段内进行全文搜索,并且只允许精确的字符串匹配。对于 "tags" 字段或具有 ["draft"、"review"、"published"] 值的 "status" 字段很有用。

祝你好运!