gpt4 book ai didi

python - elasticsearch 使用 python 客户端滚动

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:01 24 4
gpt4 key购买 nike

在 elasticsearch 中滚动时,重要的是在每次滚动时提供最新的 scroll_id:

The initial search request and each subsequent scroll request returns a new scroll_id — only the most recent scroll_id should be used.

下面的例子(取自 here )让我很困惑。首先,滚动初始化:

rs = es.search(index=['tweets-2014-04-12','tweets-2014-04-13'], 
scroll='10s',
search_type='scan',
size=100,
preference='_primary_first',
body={
"fields" : ["created_at", "entities.urls.expanded_url", "user.id_str"],
"query" : {
"wildcard" : { "entities.urls.expanded_url" : "*.ru" }
}
}
)
sid = rs['_scroll_id']

然后是循环:

tweets = [] while (1):
try:
rs = es.scroll(scroll_id=sid, scroll='10s')
tweets += rs['hits']['hits']
except:
break

它有效,但我没有看到 sid 更新的地方......我相信它发生在内部,在 python 客户端中;但我不明白它是如何工作的...

最佳答案

这是一个老问题,但出于某种原因,在搜索“elasticsearch python scroll”时首先出现。 python 模块提供了一个辅助方法来为您完成所有工作。它是一个生成器函数,它将在管理底层滚动 ID 的同时将每个文档返回给您。

https://elasticsearch-py.readthedocs.io/en/master/helpers.html#scan

这是一个用法示例:

from elasticsearch import Elasticsearch
from elasticsearch.helpers import scan

query = {
"query": {"match_all": {}}
}

es = Elasticsearch(...)
for hit in scan(es, index="my-index", query=query):
print(hit["_source"]["field"])

关于python - elasticsearch 使用 python 客户端滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24997251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com