如何使用非常大的索引在ElasticSearch上扩展文本搜索

时间:2016-03-09 06:44:49

标签: elasticsearch elasticsearch-plugin

我正在尝试针对一大堆文档优化文本搜索。作为测试数据集,我使用的是Enron电子邮件数据集~3GB,但实际数据集可能是100GB +。我的结构基本上是 GET / enron / email / 1

一些工程限制:

  • 搜索响应时间< 100毫秒

  • 尽可能减少整个数据集的重复

  • 可以假定文档是不可变的。

  • 可以通过多种方式搜索文本。以下是一些例子:

    • 查找提及“california power”一词的所有电子邮件
    • 查找包含“califoria”和模糊匹配到加利福尼亚州的所有电子邮件
    • 查找包含“轻松赚钱而不是努力工作”的所有电子邮件
    • 查找包含“窃取或勒索”的所有电子邮件

从我的阅读中可以看出,如果我不想复制数据,我宁愿在副本上使用分片。我很感激你能给我的任何见解。谢谢!

1 个答案:

答案 0 :(得分:0)

在大型索引上缩放文本搜索

水平缩放是Elasticsearch中的重要功能(考虑使用多个节点来体验群集的强大功能)

在分片的情况下,我们没有任何神奇的数字可以提及这个分片数量会提供更好的性能(需要根据我们的数据大小分割分片)。所以我们必须做几个实验来决定我们合适的分片

创建有效的映射有助于轻松获取数据。例如,如果我们要在文档中存储电子邮件意味着我们可以将数据拆分到不同的字段,如发件人,收件人列表,主题,邮件正文。我们可以决定在创建映射时需要使用哪个分析器

Es Heap大小,默认情况下,Elasticsearch的堆大小为1 GB。我们必须根据机器中可用的RAM自定义堆大小(我们有此设置的官方文档)。

除了作为重复数据调用之外,我们可以将副本称为原始数据的副本。当我们的主分片出现故障时,副本分片将自动启动(并且再次启用副本基于我们对数据可用性的需求)