1. ホーム
  2. elasticsearch

ElasticSearchで全ての_idを取得する効率的な方法

2023-11-04 11:16:22

質問

ElasticSearchからあるインデックスのすべての_idを取得する最速の方法は何ですか?単純なクエリで可能でしょうか?私のインデックスには約20,000の文書があります。

どのように解決すればよいでしょうか?

Edit: @Aleck Landgraf さんの回答も読んでください。

あなたはただ、elasticsearch-internalの _id フィールドが欲しいだけですか?それとも id フィールドを作成できますか?

前者については、次のようにしてください。

curl http://localhost:9200/index/type/_search?pretty=true -d '
{ 
    "query" : { 
        "match_all" : {} 
    },
    "stored_fields": []
}
'

2017年のアップデートをお知らせします。 この投稿にはもともと "fields": [] という名前でしたが、その後名前が変わり stored_fields が新しい値です。

結果には、ドキュメントの "metadata" のみが含まれます。

{
  "took" : 7,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 4,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "index",
      "_type" : "type",
      "_id" : "36",
      "_score" : 1.0
    }, {
      "_index" : "index",
      "_type" : "type",
      "_id" : "38",
      "_score" : 1.0
    }, {
      "_index" : "index",
      "_type" : "type",
      "_id" : "39",
      "_score" : 1.0
    }, {
      "_index" : "index",
      "_type" : "type",
      "_id" : "34",
      "_score" : 1.0
    } ]
  }
}

後者については、ドキュメントからフィールドを含めたい場合、単にそのフィールドを fields の配列に追加するだけです。

curl http://localhost:9200/index/type/_search?pretty=true -d '
{ 
    "query" : { 
        "match_all" : {} 
    },
    "fields": ["document_field_to_be_returned"]
}
'