2016-10-14 9 views
1

集計を実行して、特定のフィールド値の最初の2文字でドキュメントをグループ化しようとしています。集計フィールド値(正規表現)

特定のフィールド名でドキュメントを正常に作成しましたが、値の操作方法がわかりません。

例えば、ドキュメントのために:

[ 
    { 
    "name": "John" 
    }, 
    { 
    "name": "Jog" 
    }, 
    { 
    "name": "James" 
    }, 
    { 
    "name": "Robert" 
    }, 
    { 
    "name": "Jessica" 
    } 
] 

私は、次の応答を取得したいと思います:

[ 
    { 
    "key": "Jo", 
    "doc_count": 2 
    }, 
    { 
    "key": "Ja", 
    "doc_count": 1 
    }, 
    { 
    "key": "Ro", 
    "doc_count": 1 
    }, 
    { 
    "key": "Je", 
    "doc_count": 1 
    } 
] 

集計クエリはそれを行うことができるありますか?

答えて

2

あなたはこのように、代わりにフィールドのスクリプトでterms集約を使用することができます。あなたのnameフィールドのすべては、少なくとも2つの文字を持っている場合、スクリプトは単にdoc.name.value?.substring(0, 2)ことができることを

{ 
    "size": 0, 
    "aggs": { 
    "first_two": { 
     "terms": { 
     "script": "doc.name.value?.size() >=2 ? doc.name.value?.substring(0, 2) : doc.name.value" 
     } 
    } 
    } 
} 

注意。上記の私のスクリプトは、1文字の名前を占めています。

これが機能するには、enable dynamic scriptingも必ず確認してください。