2016-04-28 9 views
2

私はElasticsearch v2.1.1を使用しています。今、私はコレクションフィールドにカンマ区切りの値を追加したいElasticsearchは配列フィールドに値を追加します

{ 
    "took": 2, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 103, 
    "max_score": 1, 
    "hits": [ 
     { 
     "_index": "pibtest1", 
     "_type": "SearchTech", 
     "_id": "http://www.searchtechnologies.com/images/solutions/candidate-search-match-dashboard.PNG", 
     "_score": 1, 
     "_source": { 
      "Collection": "default_collection", 
      "keywords": "keywords-NOT-PROVIDED" 
      } 
     } 
    } 
} 

:私はコレクションは、次のように私のサンプルインデックス付きデータセットがあるなど、キーワードのようないくつかのフィールドでそれに

をデータセットをインデックス化しています。例えばのために

:「コレクション」:[「のdefault_collection」、」wiki_collection」]

今は、コレクションのフィールドがタイプ 『文字列』です。私はCollectionフィールドがこれのための型配列である必要があると信じています。 ESでデータのインデックスを作成する前に、配列型マッピングを作成しますか?はいの場合、どうすればいいですか? 私は以下のようなマッピングを作成しようとしましたが(データをインデックス化する前に)、うまくいかず、エラーが出ました。

PUT pibtest1 
{ 
    "mappings":{ 
    "SearchTech": { 
     "properties": { 
     "Collection" :{ 
      "type": "array", 
      "index": "analyzed" 
     } 
     } 
    } 
    } 
} 

エラー:私はこのために_update APIを使用するにはどうすればよい

{ 
    "error": { 
     "root_cause": [ 
     { 
      "type": "mapper_parsing_exception", 
      "reason": "No handler for type [array] declared on field [Collection]" 
     } 
     ], 
     "type": "mapper_parsing_exception", 
     "reason": "Failed to parse mapping [SearchTech]: No handler for type [array] declared on field [Collection]", 
     "caused_by": { 
     "type": "mapper_parsing_exception", 
     "reason": "No handler for type [array] declared on field [Collection]" 
     } 
    }, 
    "status": 400 
} 

?私はそのアップデートを読んで、apiは既存の値を新しい値に置き換えますが、値を配列に追加する必要があります。 私はクエリを検索し、結果のコレクションフィールドを更新したいと思います。ありがとうございました。

私は、この同様の記事が見つかりました:あなたは何も変更する必要はありませんAppend to an existing elasticsearch array field using python

答えて

3

を。同じマッピングを持つ

 POST index/type/id 
     { 
     "Collection": "default_collection", 
     "keywords": "keywords-NOT-PROVIDED" 
     } 

 POST index/type/id 
     { 
     "Collection": ["default_collection", "extra value"], 
     "keywords": "keywords-NOT-PROVIDED" 
     } 

両方の仕事

+1

おかげでお返事のためにたくさん:Elasticsearchでは、各フィールドの値の一つの値または配列を扱うことができます。私は今、フィールドを更新することができます。もう1つの質問があります。クエリを検索し、返されたすべての結果の結果を更新するにはどうすればよいですか? –

+2

elasticsearchは無料の構造を持つドキュメント指向のストレージです。たとえば、MySQLのように簡単ではありませんが、オプションがあります。[update by query api](https://www.elastic.co/guide/)あなたは[scripting](http://stackoverflow.com/a/36312926/604530)を使用することができますが、[scroll](https:/ en/elasticsearch/reference/current/docs-update-by-query.html) /www.elastic.co/guide/en/elasticsearch/reference/2.3/search-request-scroll.html)トラフの結果を確認し、[バッチ](https://www.elastic.co/guide/en/elasticsearch /reference/2.3/_batch_processing.html)処理を実行します。 – pkhlop

+2

@ pkhlop-ありがとうございます。私はこのhttps://github.com/yakaz/elasticsearch-action-updatebyqueryを見つけました。クエリapiによる更新は実験段階にあり、残念ながらelasticsearch v2.xはサポートしていません。 –

関連する問題