3

子オブジェクトはelasticsearchrchでどのように処理されますか?

2 つの親と 3 つの子を作成するとします。idc2を持つが親が異なる2 つの子があることに注意してください。

curl -XPUT localhost:9200/test/parent/p1 -d'{
  "name": "Parent 1"
}'

curl -XPUT localhost:9200/test/parent/p2 -d'{
  "name": "Parent 2"
}'

curl -XPOST localhost:9200/test/child/_mapping -d '{
  "child":{
    "_parent": {"type": "parent"}
  }
}'

curl -XPOST localhost:9200/test/child/c1?parent=p1 -d '{
   "child": "Parent 1 - Child 1"
}'

curl -XPOST localhost:9200/test/child/c2?parent=p1 -d '{
   "child": "Parent 1 - Child 2"
}'

curl -XPOST localhost:9200/test/child/c2?parent=p2 -d '{
   "child": "Parent 2 - Child 2"
}'

_id子を検索すると、の子が 2 人いることがわかります。c2

curl -XGET localhost:9200/test/_search

{
  "_shards": {
    "failed": 0, 
    "successful": 5, 
    "total": 5
  }, 
  "hits": {
    "hits": [
      {
        "_id": "c1", 
        "_index": "test", 
        "_score": 1.0, 
        "_source": {
          "child": "Parent 1 - Child 1"
        }, 
        "_type": "child"
      }, 
      {
        "_id": "c2", 
        "_index": "test", 
        "_score": 1.0, 
        "_source": {
          "child": "Parent 1 - Child 2"
        }, 
        "_type": "child"
      }, 
      {
        "_id": "c2", 
        "_index": "test", 
        "_score": 1.0, 
        "_source": {
          "child": "Parent 2 - Child 2"
        }, 
        "_type": "child"
      }
    ], 
    "max_score": 1.0, 
    "total": 3
  }, 
  "timed_out": false, 
  "took": 1
}

どのように対処すればよいp1/c2ですか? 親子関係_idがない場合は、子オブジェクトへのアクセス、変更、または削除を使用できます。私の場合、elasticsearchidにオブジェクトの を作成させました。

子オブジェクトにアクセスするには、次の方法_idでは不十分です。

curl -XGET localhost:9200/test/child/c2

親も指定する必要があります。

curl -XGET localhost:9200/test/child/c2?parent=p1

私のシステムではさらに悪いことに、 を使用せずに直接アクセスできるオブジェクトと、アクセスできないオブジェクトparentがあります。(どうして???)

c2 を削除した場合 (親なしで!):

curl -XDELETE http://localhost:9200/test/child/c2

両方の子が削除されます。使用する必要がある子を 1 つだけ削除するには?parent=p1

curl -XDELETE http://localhost:9200/test/child/c2?parent=p1

これが私の質問です。

  • 子オブジェクトの ID を管理するためのベスト プラクティスは何ですか?

  • つまり、どうにかして親 ID を手動で子オブジェクトに入れ、オブジェクトの を次のように構築する必要があります。id?parent=parent_id

  • なぜelasticsearchは親IDを返さないのですか?

  • elasticseach に子オブジェクトの ID を作成させた場合、それらは一意であることが保証されますか?それとも、異なる親の 2 つの子が同じになる可能性がありidますか?

4

1 に答える 1