2016-02-29 5 views
-1

У меня есть данные в моем упругом индекс, как показано ниже:Как обновить поле даты в elasticsearch

индексированные данные, как:

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{ 
    "user" : "kimchy", 
    "post_date" : "2009-11-15T14:12:12", 
    "message" : "trying out Elasticsearch" 
}' 

карт, полученных с использованием

локон -XGET локальный: 9200/twitter

{"twitter": {"aliases": {}, "mappings": {"tweet": {"properties": {"message": {"type": "string"}, "post_date ": {" Тип ":" дата "" е Ormat ":" strict_date_optional_time || epoch_millis "}," пользователь ": {" Тип ":" строка "}}}}," Настройки ": {" Индекс ": {" CREATION_DATE ":" 1456739938440" , "number_of_shards": "5", "number_of_replicas": "1", "UUID": "DwhS57l1TsKQFyzY23LSiQ", "вариант": { "создано": "2020099"}}}, "грелок": {}}}

Теперь, если я модифицирования пользователя, как показано ниже, я могу сделать то же самое:

curl -XPOST 'http://localhost:9200/twitter/tweet/1/_update' -d '{ 
    "script" : "ctx._source.user=new_user", 
    "params" : { 
     "new_user" : "search" 
    } 
}' 

Но когда я попытался изменения полей даты, как показано ниже, что дает исключение:

curl -XPOST 'http://localhost:9200/twitter/tweet/1/_update' -d '{ 
    "script" : "ctx._source.post_date='new-date'", 
    "params" : { 
     "new-date" : "2016-02-02T16:12:23" 
    } 
}' 

Исключение получили:

{ "Ошибка": { "ROOT_CAUSE": [{ "типа": "remote_transport_exception", "причина": "[Аномалия] [127.0.0.1:9300] [Индексы: данные/write/update [s]] "}]," type ":" illegal_argument_exception "," reason ":" failed выполнить script "," cause_by ": {" type ":" script_exception "," reason ": «Не удалось установить скомпилировать встроенный скрипт [ctx._source.post_date = new-date] с помощью lang [groovy]", "cause_by": {"type": "script_exception", "reason": "failed compile groovy script "," cause_by ": {" type ":" multiple_compilation_errors_exception "," reason ":" startup failed: \ ne90a551666b36d90e4fc5b08d04250da5c4d552d: 1: неожиданно маркер: - @ строка 1, столбец 26. \ п ctx._source.post_date = новая дата \ п
^ \ п \ n1 ошибки \ п "}}}}

Теперь может кто-нибудь, дай мне знаю, как я могу справиться с этим.

~ Прашант

+0

Можете ли вы поделиться картирование с помощью 'локон -XGET локальный : 9200/your_index'? – Val

+0

которое исключение? Чтобы задать очевидный вопрос, уверены ли вы, что вы не пишете 'last-login' или' new-login'? –

+0

Где находится '-' в приведенном выше примере? –

ответ

0

В Groovy (или Java), идентификатор не может содержать '-'. Если вы пишете

ctx._source.last-login = new-login 

Groovy (! И Java) разбирает это в:

(ctx._source.last)-(login) = (new)-(login) 

Вы должны процитировать эти свойства:

ctx._source.'last-login' = 'new-login' 
+0

Да, даже я пробовал с тем же, и когда я добавляю цитаты, Elastic продолжает вешать и никогда не возвращается, и нужно вручную убить службу, чтобы заставить ее работать –

+0

поведение, вероятно, не связано с этим выражением: с вашей ошибкой ElasticSearch терпит неудачу в начале и ничего не делают. –

+0

Да, так как мы можем найти, где точно elasticsearch не удалось .. и сценарий условный и будет выполняться, если условие удовлетворяет. –

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