【问题标题】:Elasticsearch structure for repetitive searching用于重复搜索的 Elasticsearch 结构
【发布时间】:2016-08-31 12:10:27
【问题描述】:

我的系统每天都通过 API 导入数据(具有相同的结构)并搜索关键字。每天都有新数据出现,所以我反复下载。 搜索关键字后,我将结果保存在其他地方。 我只需要保留最近三个月导入的数据。 由于词干和事情,我想使用elasticsearch进行全文搜索。 我需要一些关于弹性数据库结构的建议。

为每个导入和删除超过 3 个月的索引创建一个名称中包含时间戳的新索引更好,还是即使我只想在新导入的数据中搜索也将所有数据保留在一个索引中更好?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您想使用time-frame based indexing strategy。 Elasticsearch 允许您使用 index template 轻松管理此问题,这将允许您将所有数据添加到别名。例如,您可以创建这样的模板:

    PUT _template/my_index_template
    {
      "template":"my_index_*"
      "aliases:{"my_data":{}}
    }
    

    这意味着您可以向与模式“my_index_*”匹配的任何索引发出文档插入请求(即它以my_index_ 开头)。如果您在索引名称中动态包含日期,这将使您的时间建立索引。例如2016 年 8 月 31 日的数据应存储在 my_index_20160831 中,并且可以通过上述定义中列出的别名进行搜索,例如对my_data/_search 的 HTTP POST 请求将返回您的时间框架索引的数据。

    您最终会存储大量索引,并且对_cat/indices 的调用将开始如下所示:

    my_index_20160829
    my_index_20160830
    my_index_20160831
    

    现在您可以使用 curator 来查找早于特定时间段的索引。这是一个命令行工具,允许您指定要删除的索引模式。要测试它,您可以使用以下命令:

    curator show indices --prefix my_index --older-than 3 --time-unit months --timestring %Y%m%d
    

    这将显示它要删除的所有索引,然后实际删除索引将 show 更改为 delete

    更多信息可以在索引子命令here 中找到。请注意,这是 curator 的 3.5 版。版本 4 的语法已更改。

    【讨论】:

      【解决方案2】:

      嗯……其实没试过,但好像合乎逻辑:

      https://www.elastic.co/blog/curator-tending-your-time-series-indices

      https://www.elastic.co/guide/en/elasticsearch/client/curator/current/about.html

      感谢这篇文章,我会在需要时找到解决方案:)

      【讨论】:

      • 使用curator处理时基索引效果很好。这就是我们正在使用的:我们每天有一个索引和一个运行 curator 的 cronjob,删除旧的索引。
      【解决方案3】:

      有一天我遇到了同样的问题。如果大约 90 个索引不多,那么我建议你做单独的索引。获取数据将比使用第二个选项查询数据更快。

      【讨论】:

        猜你喜欢
        • 2020-03-29
        • 1970-01-01
        • 1970-01-01
        • 2021-09-21
        • 2020-03-25
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 2012-09-15
        相关资源
        最近更新 更多