2017-11-21 3 views
0
[ 
    { 
     "name": "Document 1", 
     "tags": { 
      "typeATags": ["a1"], 
      "typeBTags": ["b1"], 
      "typeCTags": ["c1"], 
      "typeDTags": ["d1"] 
     } 
    }, 
    { 
     "name": "Document 2", 
     "tags": { 
      "typeATags": ["a2"], 
      "typeBTags": ["b1", "b2"], 
      "typeCTags": ["c2"], 
      "typeDTags": ["d1", "d2"] 
     } 
    }, 
    { 
     "name": "Document 3", 
     "tags": { 
      "typeATags": ["a1", "a2", "a3"], 
      "typeBTags": ["b1", "b2", "b3"], 
      "typeCTags": ["c3"], 
      "typeDTags": ["d1", "d2", "d3"] 
     } 
    } 
] 
ES 6.0にクエリを作成する方法

、 ? //返さなければならない1,3ES検索で配列アイテムを持つネストされたオブジェクトに対してJSONベースのクエリを構築する方法は? 「A1」と「B1」のタグを持つすべてのレコードを返します

「a1」タグと「a2」タグを組み合わせたすべてのレコードが返されますか? // 3を返す必要があります

「a1」または「a2」タグを持つすべてのレコードが返されますか? // 1,2,3

これは、 'a1' AND( 'c1' OR 'c3')タグを持つすべてのレコードを返しますか?私は

を検索できるように、クエリを構築するために助けてください。ここ

は私の実際のスキーマで、

{ 
    "cmslocal": { 
     "mappings": { 
      "video": { 
       "properties": { 
        "assetProps": { 
         "properties": { 
          "assetType": { 
           "type": "string" 
          }, 
          "configPath": { 
           "type": "string", 
           "fields": { 
            "raw": { 
             "type": "string", 
             "index": "not_analyzed" 
            } 
           }, 
           "analyzer": "standard" 
          }, 
          "contentSha1": { 
           "type": "string" 
          }, 
          "originalPath": { 
           "type": "string", 
           "fields": { 
            "raw": { 
             "type": "string", 
             "index": "not_analyzed" 
            } 
           }, 
           "analyzer": "standard" 
          }, 
          "path": { 
           "type": "string", 
           "fields": { 
            "raw": { 
             "type": "string", 
             "index": "not_analyzed" 
            } 
           }, 
           "analyzer": "standard" 
          }, 
          "thumbnailPath": { 
           "type": "string", 
           "fields": { 
            "raw": { 
             "type": "string", 
             "index": "not_analyzed" 
            } 
           }, 
           "analyzer": "standard" 
          } 
         } 
        }, 
        "channel": { 
         "type": "string" 
        }, 
        "configProps": { 
         "properties": { 
          "events": { 
           "type": "nested", 
           "include_in_root": true, 
           "properties": { 
            "Desc": { 
             "type": "string" 
            }, 
            "Tags": { 
             "type": "string" 
            }, 
            "UUID": { 
             "type": "string" 
            } 
           } 
          }, 
          "roiUUID": { 
           "type": "string" 
          } 
         } 
        }, 
        "contentSha1": { 
         "type": "string" 
        }, 
        "eventDesc": { 
         "type": "string" 
        }, 
        "ext": { 
         "type": "string" 
        }, 
        "format": { 
         "type": "string" 
        }, 
        "fovProps": { 
         "properties": { 
          "description": { 
           "type": "string" 
          }, 
          "width": { 
           "type": "float" 
          } 
         } 
        }, 
        "locationProps": { 
         "type": "nested", 
         "properties": { 
          "address": { 
           "type": "string" 
          }, 
          "city": { 
           "type": "string" 
          }, 
          "country": { 
           "type": "string" 
          }, 
          "county": { 
           "type": "string" 
          }, 
          "location": { 
           "type": "geo_point" 
          }, 
          "postcode": { 
           "type": "string" 
          }, 
          "state": { 
           "type": "string" 
          } 
         } 
        }, 
        "nodeid": { 
         "type": "string" 
        }, 
        "poleHeight": { 
         "type": "float" 
        }, 
        "query": { 
         "properties": { 
          "bool": { 
           "properties": { 
            "filter": { 
             "properties": { 
              "term": { 
               "properties": { 
                "nodeid": { 
                 "type": "string" 
                } 
               } 
              } 
             } 
            } 
           } 
          } 
         } 
        }, 
        "retentionPolicy": { 
         "type": "string" 
        }, 
        "siteScopeID": { 
         "type": "string" 
        }, 
        "tagProps": { 
         "type": "nested", 
         "properties": { 
          "conditions": { 
           "type": "string" 
          }, 
          "environment": { 
           "type": "string" 
          }, 
          "events": { 
           "type": "string" 
          }, 
          "lighting": { 
           "type": "string" 
          }, 
          "objects": { 
           "type": "string" 
          }, 
          "other": { 
           "type": "string" 
          }, 
          "scenes": { 
           "type": "string" 
          }, 
          "useCases": { 
           "type": "string" 
          }, 
          "weather": { 
           "type": "string" 
          } 
         } 
        }, 
        "test": { 
         "type": "string" 
        }, 
        "title": { 
         "type": "string" 
        }, 
        "uploadTime": { 
         "type": "date", 
         "format": "strict_date_optional_time||epoch_millis" 
        }, 
        "videoProps": { 
         "properties": { 
          "bitrate": { 
           "type": "float" 
          }, 
          "datetime": { 
           "type": "date", 
           "format": "date_hour_minute_second_millis" 
          }, 
          "daySegments": { 
           "type": "string" 
          }, 
          "duration": { 
           "type": "long" 
          }, 
          "framerate": { 
           "type": "float" 
          }, 
          "height": { 
           "type": "integer" 
          }, 
          "overlaysOn": { 
           "type": "boolean" 
          }, 
          "width": { 
           "type": "integer" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

://編集1回答 ため@mickl 1,2

感謝を返す必要があります

  1. のみのnodeId、唯一のチャネル、日付​​範囲
  2. タグのどれ

私は

{ 
    "query": { 
     "bool": { 
      "filter": [ 
       { "match": { "nodeid": "N02cff15a" } }, 
       { "match": { "channel": "1" } } 
      ] 
     } 
    } 
} 

を使用して、チャネルIDのnodeIdを検索することができるよと私は私が検索できるように、私は2つのクエリを組み合わせるヘルプ

{ 
    "nested": { 
     "path": "tagProps", 
     "query": { 
      "bool": { 
       "must": [ 
        { "match": { "tagProps.objects": "car" } }, 
        { "match": { "tagProps.objects": "truck" } } 
       ] 
      } 
     } 
    } 
} 

を使用してtagPropsを検索することができことができますタグの組み合わせによるNodeId

+0

クエリを作成するときに「typeATags」が指定されていますか?だから、擬似コードでは、タグのようなものが必要です:a1または類似のtags.typeATags:a1? – mickl

+0

tags.typeATags:a1は私が探しているものです。 – Vkrm

答えて

1

タグはネストされたフィールドなので、ドキュメントのインデックスを作成する前にnestedマッピングを定義する必要があります。

{ 
    "mappings": { 
    "your_type": { 
     "properties": { 
     "tags": { 
      "type": "nested" 
     } 
     } 
    } 
    } 
} 

今、あなたは、あなたがそれのようだあなたの最初のユースケースのために、ネストされたクエリ構文をインデックスデータとを利用することができますすることができます

{ 
    "query": { 
    "nested": { 
     "path": "tags", 
     "query": { 
     "bool": { 
      "must": [ 
      { "match": { "tags.typeATags": "a1" }},   
      { "match": { "tags.typeBTags": "b1" }}   
      ] 
     } 
     } 
    } 
    } 
} 

次のクエリは必須で構成されるとすべき、のためのようにすることができます最後の1つ:

{ 
    "query": { 
    "nested": { 
     "path": "tags", 
     "query": { 
     "bool": { 
      "must": [ 
       { "match": { "tags.typeATags": "a1" }} 
      ], 
      "should": [ 
       {"match": {"tags.typeCTags": "c1"}}, 
       {"match": {"tags.typeCTags": "c3"}} 
      ] 
     } 
     } 
    } 
    } 
} 
関連する問題