1

私はElasticsearchを使用するための小さな一歩を踏み出しましたが、別の問題を調査しているときに、この質問に遭遇しました。ここで、スワトキンスはネストされたオブジェクトのクエリについて質問し、レスポンダーは、モデルを考えるとネストされたオブジェクトは必要ないと指摘しました。ここにモデルをコピーし、特定の質問を反映するためにいくつかの変更を加えました。

[{
    id:4635,
    description:"This is a test description",
    author:"John",
    author_id:51421,
    meta: {
        title:"This is a test title for a video",
        description:"This is my video description",
        url:"/url_of_video"
        awesomeness-level: "pretty-awesome"
        kung-fu: true
    }
},
{
    id:4636,
    description:"This is a test description 2",
    author:"John",
    author_id:51421,
    meta: {
        title:"This is an example title for a video",
        description:"This is my video description2",
        url:"/url_of_video2"
        kung-fu:false
        monsters:true
        monsters-present: "Dracula, The Mummy"
    }
}]

このアプリケーションでは、ユーザーがカスタムメタデータを定義できるため、ネストされたオブジェクトを使用してそのデータを表します。一見、スワトキンスのモデルに似ているので、ネストされたオブジェクトを使うべきではないと思いました。

大きな違いは、各オブジェクトのメタが異なる可能性があることです。2番目のビデオには特に「モンスター映画」に関するメタがあり、最初のビデオは「素晴らしさのレベル」を参照しています。では、ネストされたオブジェクトを使用する必要がありますか、それともメタデータを通常のフィールドとしてマッピングするだけですか?後者を行う場合、最初のビデオには空のメタデータフィールドがありますか?それは本当に重要ですか?前もって感謝します!

4

1 に答える 1

1

metaあなたの例が2つのelasticsearchドキュメントを表していると仮定すると、ネストされたオブジェクトを作成する必要はないようです. 1 つの親オブジェクトに複数のネストされたオブジェクトがあり、検索にネストされたオブジェクトの複数のフィールドが含まれる場合、ネストされたオブジェクトを使用することは理にかなっています。たとえば、次のようなレコードがあるとします。

{
  "name": "apple",
  "attributes": [
     {
       "color": "yellow",
       "size": "big"
     },
     {
       "color": "red",
       "size": "small"
     }
  ]
}

color:yellow AND shape:bigorを検索したときにこのレコードが見つかるようにしcolor:red AND shape:smallたいが、 を検索したときに返されたくない場合は、ネストされたオブジェクトcolor:yellow AND shape:smallを作成するのが理にかなっています。attributes各属性を個別にインデックス付けして検索し、一致する属性の親オブジェクトを取得できます。

于 2013-01-16T17:53:56.213 に答える