如何仅通过所有索引中的id从elasticsearch中获取文档

时间:2020-08-21 15:06:22

标签: python elasticsearch

我在python中有一个项目,我需要从其中的一个文档中获取 indexes index_1 2 3或4 ,但是我只有ID,在不久的将来,我还将有4个IDexe因此,总共 8 我无法在8个版本中的每一个中都找到该文档。

所以我的问题是,有没有一种方法可以通过id直接获取文档?如果没有,还有其他选择吗?非常感谢你

这是我到目前为止所拥有的:

url = settings.ES_URL+"/{}/_doc/{}?pretty=false"
url = url.format(index, id)
r = requests.get(url,auth=HTTPBasicAuth('*****', '*******'))

我尝试每个索引,但这不是我想要的

2 个答案:

答案 0 :(得分:0)

您可以使用Index Alias。从本质上讲,它仍然在多个索引中搜索,但是搜索时不必提及单个索引名称。

说我有以下两个索引

PUT my_index_001    

PUT my_index_002

在这些索引中的两个文档下面

POST my_index_001/_doc/1234
{
  "myfield": "test"
}

POST my_index_002/_doc/1235
{
  "myfield": "test"
}

我可以按照以下方式创建别名索引my_index

PUT /my_index_001/_alias/my_index

PUT /my_index_002/_alias/my_index

现在,您可以简单地使用此索引通过任何termmatch查询来搜索文档。

POST my_index/_search.          <--- Note the index used here to search
{
  "query": {
    "term": {
      "_id": "1234"             <--- Note the field `_id`
    }
  }
}

请注意,您不能使用别名的概念直接获得像GET my_index/_doc/1234这样的文档,因为它首先是单个索引操作,我相信拥有别名的全部目的是无缝增强搜索功能,而不是为了直接文档检索。

答案 1 :(得分:0)

使用elasticsearch的别名功能可将所有索引映射到一个别名下。稍后代替查询所有8个索引,而是查询关联的别名索引,这将为您完成所有8个搜索并返回结果。