我使用multisearch(msearch from elasticsearch py)从索引列表中使用文档id列表搜索所有文档。id是显式分配的。目标是查找现有文档(使用id列表)并更新已经存在的文档,如果文档不存在,则创建一个新索引。因为可能有超过10k的ID需要搜索,所以我使用这段代码进行搜索。
results = []
chunks = [list_with_ids[x:x+10000] for x in range(0, len(list_with_ids), 10000)]
for chunk in chunks:
if len(chunk)>0:
request = []
for _, index in enumerate(list_of_indices):
req_head = {'index': index}
req_body = {
"size":10000,
"query": {
"ids": {
"values": chunk
}
},
}
request.extend([req_head, req_body])
try:
result = client.msearch(body=request)
except:
continue
for response in result['responses']:
results.append(response)
查询在大多数情况下似乎运行良好,但有时似乎查询没有返回与查询匹配的所有文档——这就好像带有某些ID的文档在elasticsearch上还不存在,而我代码的其余部分(此处未显示)为其创建了一个新文档,从而创建了文档。我们如何确保所有匹配的文件都被退回?
暂无答案!
目前还没有任何答案,快来回答吧!