确保使用elasticsearch上的multisearch返回与查询匹配的所有文档

ua4mk5z4  于 2021-06-09  发布在  ElasticSearch
关注(0)|答案(0)|浏览(344)

我使用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上还不存在,而我代码的其余部分(此处未显示)为其创建了一个新文档,从而创建了文档。我们如何确保所有匹配的文件都被退回?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题