Я довольно новичок вasticsearch (6.6.0), я хотел бы выполнить один запрос, который может одновременно создавать / обновлять документ на основе настраиваемого поля.
Вот моя структура документа
{
"_index" : "document",
"_type" : "_doc",
"_id" : "nvs9gmkB0wioRAGjGGVA",
"_score" : 1.0,
"_source" : {
"customId" : "4a3e7b21-9be9-4378-98ec-aa3e9f40aee7",
"title" : "test",
}
}
Используя NEST (последний известный пакет nuget), я создал следующий метод для добавления / обновления поля в документе
var response = await _client.UpdateByQueryAsync < dynamic > (s => s
.Index("document")
.Type("_doc")
.Query(q => q.Match(t => t
.Field("customId")
.Query("4a3e7b21-9be9-4378-98ec-aa3e9f40aee7")
))
.Script(sc => sc
.Source("ctx._source." + PARAMETER_NAME + " = params." + PARAMETER_NAME)
.Params(p => p
.Add(PARAMETER_NAME, PARAMETER_VALUE)
)
.Lang(ScriptLang.Painless)
)
.RequestsPerSecond(-1)
.WaitForCompletion()
.Refresh()
).ConfigureAwait(false);
if (!response.IsValid) {
//error logic goes here
}
return response;
Если я пытаюсь использовать метод для ОБНОВЛЕНИЕ заголовок документа с заданным customId все работает просто отлично.Однако, если я попытаюсь использовать тот же метод для ADD поля к документу , ничего не произойдет , запрос вернет «действительный ответ на гнездо, созданный из успешного низкоуровневого вызова по почте», идвижется дальше.
Я попытался повторить тот же запрос и выполнить его в kibana, и он прекрасно работает, обновляя документ, вот запрос:
POST document/_doc/_update_by_query?requests_per_second=-1&wait_for_completion=true&refresh=true
{
"query": {
"match": {
"customId": {
"query": "4a3e7b21-9be9-4378-98ec-aa3e9f40aee7"
}
}
},
"script": {
"lang": "painless",
"params": {
"datetime": "2019-03-15T11:44:43.555Z"
},
"source": "ctx._source.datetime = params.datetime"
}
}
На данный момент яЯ довольно потерян, что мне не хватает?
Спасибо.
PS : документ может измениться со временем, чтобы справиться с тем, что я создалШаблон для всех моих документов, после создания индекса документа имеет следующий динамический шаблон:
"dynamic_templates" : [
{
"string_fields" : {
"match" : "*",
"path_unmatch" : "customId",
"match_mapping_type" : "string",
"mapping" : {
"analyzer" : "autocomplete",
"search_analyzer" : "autocomplete_search",
"type" : "text"
}
}
}
]