国内外新闻动态,ASO干货,行业资讯。 德普优化,出海必备ASO数据分析平台! 投稿请发送至邮箱:2902675294@qq.com

通过scan和scroll为elasticsearch重建索引

资讯快闻 蓝天白云 3952℃ 0评论

ES的索引映射mapping一旦建立,后续只能增加字段,如果要修改原有字段、更换切词规则、增加路由routing等,就只能通过对数据重新建立索引。由于elasticsearch通过_source字段保存了原始数据,可以直接通过es中保存的数据来重新建立索引。

为已经存在的数据适用这些更改的最简单的方法就是重索引(Reindex):新建一个拥有最新配置的索引,然后将所有旧索引中的数据拷贝到新的索引中。

es提供了scan和scroll方法来快速批量读取数据,可以用于重新索引。

步骤如下:

1.通过scan接口设置需要读取的数据范围

POST  http://127.0.0.1:9200/oldindex/_search?search_type=scan&scroll=1m

{
   "query": {
      "range": {
          "date": {
              "gte": "2008",
              "lt": "2010"
          }
      }
   },
   "size": 100
}

返回结果:

{
    "_scroll_id": "c2NhbjsxMDs2MTMyMDp5V3hlR2hGZFIybXdzT0RjbXdaUS1nOzYxMzYwOm5HTzJjcnc0VGdpUnZmNGNnVGFlTmc7MTU1OkFiakkyV0h4UUM2NUxJMndtbDhVRmc7MTUzOkFiakkyV0h4UUM2NUxJMndtbDhVRmc7MTU0OkFiakkyV0h4UUM2NUxJMndtbDhVRmc7MTg4Om5QaXhoZlpxU0IybzZVN09wSHl5dlE7NjEzNTk6bkdPMmNydzRUZ2lSdmY0Y2dUYWVOZzs2MTMyMTp5V3hlR2hGZFIybXdzT0RjbXdaUS1nOzYxMzYxOm5HTzJjcnc0VGdpUnZmNGNnVGFlTmc7MTg5Om5QaXhoZlpxU0IybzZVN09wSHl5dlE7MTt0b3RhbF9oaXRzOjE5NzY7",
    "took": 1019,
    "timed_out": false,
    "_shards": {
        "total": 10,
        "successful": 10,
        "failed": 0
    },
    "hits": {
        "total": 1976,
        "max_score": 0,
        "hits": []
    }
}

参数说明:

输入scroll=1m 表明保持搜索结果可用一分钟

返回_scroll_id字段为后续输入参数

注意:这一步不返回结果

2.通过scroll接口读取数据

POST  http://127.0.0.1:9200/_search/scroll?scroll=1m

c2NhbjsxMDs2MTMyMDp5V3hlR2hGZFIybXdzT0RjbXdaUS1nOzYxMzYwOm5HTzJjcnc0VGdpUnZmNGNnVGFlTmc7MTU1OkFiakkyV0h4UUM2NUxJMndtbDhVRmc7MTUzOkFiakkyV0h4UUM2NUxJMndtbDhVRmc7MTU0OkFiakkyV0h4UUM2NUxJMndtbDhVRmc7MTg4Om5QaXhoZlpxU0IybzZVN09wSHl5dlE7NjEzNTk6bkdPMmNydzRUZ2lSdmY0Y2dUYWVOZzs2MTMyMTp5V3hlR2hGZFIybXdzT0RjbXdaUS1nOzYxMzYxOm5HTzJjcnc0VGdpUnZmNGNnVGFlTmc7MTg5Om5QaXhoZlpxU0IybzZVN09wSHl5dlE7MTt0b3RhbF9oaXRzOjE5NzY7

上一步的_scroll_id作为post参数

返回结果,并且包含下一次scroll的_scroll_id

3.把结果通过批量写bulk接口写入新索引中

http://127.0.0.1:9200/_bulk

具体_bulk用法见https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

4.重复2-3步骤,直到2不返回结果停止

每次把上一次返回的_scroll_id作为当前的参数

 

附python代码:reindex

 

 

转载请注明:德普微新文 » 通过scan和scroll为elasticsearch重建索引

喜欢 (1)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址