1

ドキュメントを更新しようとしています (要素をリストに追加することによって)、またはドキュメントが存在しない場合は作成しようとしています。たとえば、リストがまだ存在しない場合id == Donald_Duckは、リストの要素を追加するドキュメントが必要です。suggestions

name = 'Donald_Duck'
suggestions = ['Donald', 'Donald duck', 'Duck', 'Duck Avanger']
body = {
           "script" : "ctx._source.text += new_suggetions",
           "params" : { "new_suggestions" : suggestions},
            "upsert" : suggestions
        }


es.update(index=INDEX_NAME, doc_type='test', id=name, body=body)

残念ながら、私は次のようになりますRequestError

RequestError: TransportError(400, 'mapper_parsing_exception', 'failed to parse')  

これは私のマッピングがどのように見えるかです:

mappings = {
  "mappings": {
    "test": { 
      "properties": { 
        "text":    { 
                    "type": "completion", 
                    "analyzer" : "simple",
                    "search_analyzer" : "simple" 
        }, 
      }
    }
  }
}

どうすればこれを修正できますか? bulk複数のドキュメントがある場合、 APIで同じコードを使用できますか?

4

1 に答える 1

2

体にタイプミスがあります:

body = {
    "script": "ctx._source.text += new_suggestions",
    "params": { "new_suggestions" : suggestions},
    "upsert": {
        "text": suggestions
    }
}

さらに、更新のスクリプトを有効にしていることを確認してください。https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.htmlをお読みください

于 2016-06-27T19:48:34.330 に答える