2016-06-27 8 views
1

Я пытаюсь обновить документ (путем добавления элементов в список) или создать, если он не существует. Например, я хочу, чтобы документ с id == Donald_Duck добавил элементы списка suggestions, если он уже не представлен.Использовать API Python для условного обновления документа ElasticSearch

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" 
     }, 
     } 
    } 
    } 
} 

Как я могу это исправить? Если у меня есть несколько документов, могу ли я использовать тот же код с API bulk?

ответ

2

У вас есть какая-то опечатка в вашем теле:

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

Plus, вы уверены, что вы включили сценарии обновления. Пожалуйста, прочитайте https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html

+0

Да, скрипты уже позволили, спасибо за проверку. – meto

+0

Я думаю, вы имеете в виду «текст: предложения», правильно? – meto

+1

да действительно, я его отредактировал –

 Смежные вопросы

  • Нет связанных вопросов^_^