2

我有一个 200M 的文档索引,我想重新索引。

我编写了以下脚本,该脚本遍历旧索引中的文档,并将它们与 balk insert 一起放入新索引中。

每个批量的大小为 2000 个文档。

 search_obj = pyes.query.Search(query = pyes.query.MatchAllQuery(), start=resume_from)

 old_index_iterator = self.esconn.search(search_obj, self.index_name)
 counter = 0
 BULK_SIZE = 2000

 for doc in old_index_iterator:
   self.esconn.index(doc=doc, doc_type=DOC_TYPE, index=new_index_name, id=doc.get_id(), bulk=True)
   counter += 1

   if counter % BULK_SIZE == 0:
     self.logger.debug("Refreshing...")
     self.esconn.refresh()
     self.logger.debug("Refresh done.")


 self.esconn.refresh()

观察:

  1. 我得到的速度很慢:大约 150 个文档/分钟。
  2. 刷新操作的时间为 0。如果我删除索引命令(只是从 DB 中读取)-我加快了 10 倍。

结论:

  • 索引忽略 bulk=True 标志,并将每个文档推送到 ES 服务器。

任何人都知道请帮我弄清楚为什么 bulk=True 没有效果?

4

1 回答 1

0

您的低速是关于从旧索引中读取而不是插入新索引。

尝试扫描模式并在阅读时滚动:

result_set = self.esconn.search(pyes.query.MatchAllQuery(),indices=INDEX_NAME, doc_types=INDEX_TYPE, scan=True, scroll_timeout="10m")
for doc in result_set:
    pass # do your insert task

并且默认刷新大小为400,间隔为1s,一般不需要重新设置。

于 2016-03-17T00:39:45.753 回答