提高弹性搜索扫描的速度



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

感谢您调查此:)

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

要尝试的其他两件事是调整size,找到适合您的环境的最佳值。另外,如果您不需要完整的_source,请尝试消除带有_source_exclude_source_include的字段,我已经看到使用这些字段具有很大的性能改进。

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

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

相关内容

  • 没有找到相关文章

最新更新