提高elasticsearchpy扫描速度

2024-04-26 10:19:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种方法来提高对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()

感谢您对此进行调查:)


Tags: 方法fromimportclienttruesearchlinefilter
2条回答

最好的方法是删除sortpreserve_order参数。您还可以使用multiprocessing查看切片滚动以并行运行多个扫描,可以在(0)中看到一个示例。希望这有帮助!在

0-https://github.com/elastic/elasticsearch-dsl-py/issues/817#issuecomment-372271460

老问题,但可能会帮助其他人:

另外两件事是调整size,找到一个适合您的环境的最佳值。另外,如果您不需要完整的_source,请尝试使用_source_exclude或{}来消除字段,我已经看到使用它们的性能有了很大的提高。在

相关问题 更多 >