2017-08-23 10 views
1

elasticsearchには、オブジェクトの配列を持つ型があります。 Kibanaからアクセスしようとするとオブジェクトの配列のフィルタ

にアクセスしている間、私は配列としてそれをインデックス、私はコレクションすなわち内に複数のオブジェクトを持つことができます。ここ

{ 
    "myIndex-2017.08.22": { 
     "mappings": { 
      "typeA": { 
       "properties": { 
        . 
        . 
        . 
        "Collection": { 
         "properties": { 
          . 
          . 
          . 
          "FileType": { 
           "type": "text" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

、ここに私のマッピングからの抽出物である、いくつかの矛盾を取得しています。たとえば、FileType:DOCXのように1つのFileTypeを使用してクエリを実行しようとすると、FileTypeを含むレコードもHTMLとして取得されます。

深く見ると、FileType:DOCXとFileType:HTMLの2つのコレクション要素を持つレコードの一部が原因であることがわかりました。

なぜこのようなフィルタリングが機能していますか? FileType:DOCXのみをフィルタリングして取得する他の方法はありますか?FileType:HTMLは表示しません。

実行中ES 5.3。

答えて

3

Elasticsearchはそう

{ 
"files" : [ 
    { 
     "name" : "name1", 
     "fileType" : "doc" 
    }, 
    { 
     "name" : "name2", 
     "fileType" : "html" 
    } 
    ]} 

となり、箱から出して配列フィールドをフラット化:

{ 
    "files.name" : [ "name1", "name2" ], 
    "files.fileType" : [ "doc", "html" ] 
} 

あなたはこの配列内のオブジェクトそのものを検索したい場合は、中nested datatypeを使用する必要がありますコレクションのマッピング:

{ 
    "myIndex-2017.08.22": { 
     "mappings": { 
      "typeA": { 
       "properties": { 
        . 
        . 
        . 
        "Collection": { 
         "type": "nested", 
         "properties": { 
          . 
          . 
          . 
          "FileType": { 
           "type": "text" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+1

素晴らしいです。私はそれを試してみましょう.. – M22an

+0

これはelasticsearchで動作しているようですが、私は木場でこれらのフィールドを照会することができません。 – M22an

+0

クイックグーグルでは、これが木場によってサポートされていないことを示しています:((https://github.com/elastic/kibana/issues/1084))私たちは木場でもこの作業を行うことができる方法はありますか? – M22an

関連する問題