我正在寻找一种方法来提高滚动扫描我的elasticsearch数据的速度。
下面的python代码扫描多个索引,并将结果输出到控制台和某个位置的文件中。
我的测试得出的结论是,这种方法效率极低,并且需要大量的时间(10个事件/秒?)。我猜这是由一些内部默认值或限制引起的。
有没有一种方法可以让我设计出更好的性能呢?
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, Q
client = Elasticsearch(
[
'http://localhost:9201/',
],
verify_certs=True
)
search = Search(using=client, index="test1,test2,test3") \
.filter(Q("wildcard", name="bob*") & Q("term", color="green")) \
.filter('range', **{'@timestamp':{'gte': 'now-2d', 'lt': 'now'}}) \
.sort('@timestamp') \
.params(preserve_order=True)
file = open("X:/files/people.txt", "a")
for hit in search.scan():
line = (hit.message + "\n")
file.write(line)
print(line)
file.close()感谢您对此进行研究:)
发布于 2019-10-17 23:42:15
这是一个老问题,但可能会对其他人有所帮助:
可以尝试的另外两件事是调整size,找到一个适合您的环境的最佳值。另外,如果你不需要完整的_source,试着用_source_exclude或_source_include去掉字段,我已经看到使用它们的性能有了很大的提高。
发布于 2018-07-11 22:36:32
使其更快的最佳方法是删除sort和preserve_order参数。您还可以查看切片滚动以使用multiprocessing并行运行多个扫描,您可以在(0)中看到一个示例。希望这能有所帮助!
0- https://github.com/elastic/elasticsearch-dsl-py/issues/817#issuecomment-372271460
https://stackoverflow.com/questions/51266587
复制相似问题