是否可以对 ElasticSearch 索引进行分区?

Posted

技术标签:

【中文标题】是否可以对 ElasticSearch 索引进行分区?【英文标题】:Is it possible to partition an ElasticSearch index? 【发布时间】:2021-11-06 22:04:32 【问题描述】:

我有大量在磁盘上经常更改的源代码。源代码以“项目”块的形式组织(并且可能是最好的管理)。我想维护源代码的当前索引,以便可以搜索它们。不需要文件的历史版本。

为了避免删除/添加过程中的索引无限增长,我想以块(分区?)管理索引。摄取过程将在重新索引项目之前删除与项目相对应的块。在重新索引期间短暂缺少数据是可以容忍的。

当执行 I 查询时,我需要点击所有的块。索引的管理是我最关心的——性能不太重要。

我可以想象这可能有两种工作方式:

对索引进行分区。删除一个分区,然后重建它。 元索引。每个项目都将创建为一个单独的索引,但某种“元”结构将允许在单个操作中查询所有项目。

根据我的阅读,这似乎不是翻转索引的候选对象。

有超过 1000 个项目。在执行查询时指定项目列表是不切实际的。

是否可以对索引进行分区,以便我可以在命名块中管理(删除和重新索引)它,同时保持将其作为单个统一索引进行查询的能力?

【问题讨论】:

【参考方案1】:

是的,您可以使用aliases 实现此目的。

假设您在索引“project-1”中有项目数据的“旧”版本,并且该索引还有一个别名“project”。 然后在索引“project-2”中索引项目数据的“新”版本。所有查询都是在别名“project”上完成的,而不是直接查询索引。

因此,当您完成新版本数据的重新索引后,您只需将别名从“project-1”切换到“project-2”。您的查询不会中断服务。

就是这样!

POST _aliases

  "actions": [
    
      "add": 
        "index": "project-1",
        "alias": "project"
      
    ,
    
      "remove": 
        "index": "project-2",
        "alias": "project"
      
    
  ]

【讨论】:

这正是我想要的!我刚刚开始走多目标查询的道路,但这相当不方便且不太精确。这提供了出色的控制。

以上是关于是否可以对 ElasticSearch 索引进行分区?的主要内容,如果未能解决你的问题,请参考以下文章

BOOT 整合 ElasticSearch

Elasticsearch相关核心概念

Elasticsearch:运用scroll接口对大量数据实现更好的分页

elasticSearch精确索引和全文索引

对DynamoDB数据进行排序

Elasticsearch:运用 Java 对索引进行 nested 搜索