2016-09-09 4 views
0

返されたフィールドをクエリから操作する(たとえば連結する)方法はありますか?elasticsearchの返されたフィールドを操作する

これは私が私のインデックスを作成する方法である:

PUT /megacorp/employee/1 
{ 
    "first_name" : "John", 
    "last_name" : "Smith", 
    "age" :  25, 
    "about" :  "I love to go rock climbing", 
    "interests": [ "sports", "music" ] 
} 

そして、これは私がそれを照会する方法です:

GET /megacorp/employee/_search 
{ 
    "query": {"match_all": {}} 
} 

応答はこれです:

すべてが正常に動作しています
{ 
    "took": 4, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 1, 
    "max_score": 1, 
    "hits": [ 
     { 
     "_index": "megacorp", 
     "_type": "employee", 
     "_id": "1", 
     "_score": 1, 
     "_source": { 
      "first_name": "John", 
      "last_name": "Smith", 
      "age": 25, 
      "about": "I love to go rock climbing", 
      "interests": [ 
      "sports", 
      "music" 
      ] 
     } 
     } 
    ] 
    } 
} 

私が望むのは、_sourceから2つのフィールドを連結し、新しいフィールドとして出力に表示することです。

first_nameとlast_nameは、新しいフィールド "full_name"に結合する必要があります。インデックスに新しいフィールドを作成せずにその方法を理解することはできません。私は "copy_to"を見てきましたが、明示的にマッピングのストアプロパティを設定する必要があり、明示的にクエリの格納フィールドを要求する必要があります。しかし、主な欠点は、両方を行うと、first_nameとlast_nameがコンマで区切られて返されることです。私は素敵な文字列が好きです: "John Smith"

答えて

0
GET /megacorp/employee/_search 
{ 
    "query": {"match_all": {}}, 
    "script_fields": { 
    "combined": { 
     "script": "_source['first_name'] + ' ' + _source['last_name']" 
    } 
    } 
} 

dynamic scriptingを有効にする必要があります。

0

あなたは、あなたがこれを機能させるためにはenable dynamic scriptingに確認する必要があり

GET /megacorp/employee/_search 
{ 
    "query": {"match_all": {}}, 
    "script_fields" : { 
     "full_name" : { 
      "script" : "[doc['first_name'].value, doc['last_name'].value].join(' ')" 
     } 
    } 
} 

ことを達成するためにscript_fieldsを使用することができます。

関連する問題