ElasticSearch嵌套-使用UpdateByQuery创建不存在的字段或更新现有字段
我是elasticsearch(6.6.0)的新手,我想实现一个查询,它可以基于自定义字段创建/更新文档 这是我的文档结构ElasticSearch嵌套-使用UpdateByQuery创建不存在的字段或更新现有字段,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我是elasticsearch(6.6.0)的新手,我想实现一个查询,它可以基于自定义字段创建/更新文档 这是我的文档结构 { "_index" : "document", "_type" : "_doc", "_id" : "nvs9gmkB0wioRAGjGGVA", "_score" : 1.0, "_source" : { "customId" : "4a3e7b21-9be9-4378-98ec-aa3e9f40aee7",
{
"_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;
在这一点上我很迷路,我错过了什么
多谢各位
p.S:文档可能会随着时间的推移而改变,为了解决这个问题,我为所有文档创建了一个模板,一旦创建,文档索引将具有以下动态模板:
"dynamic_templates" : [
{
"string_fields" : {
"match" : "*",
"path_unmatch" : "customId",
"match_mapping_type" : "string",
"mapping" : {
"analyzer" : "autocomplete",
"search_analyzer" : "autocomplete_search",
"type" : "text"
}
}
}
]
为什么不使用正确的映射重新索引所有文档?否则,搜索datetime属性将找不到任何内容,因为数据类型未知。我应该提到,文档可能会随着时间的推移而改变,添加新的参数,我无法立即映射,为了解决这个问题,我创建了一个索引模板,它映射了所有文本字段,并使用自定义分析器和SearchAnalyzer进行搜索。我已经尝试过,通过kibana,用一个新的文本参数更新一个文档,正如预期的那样,由于分析器,该参数可以立即搜索。更新的我的问题是
customId
文档的唯一标识符吗?如果是这样,您是否考虑过将其用作Elasticsearch中文档的\u id
?是的,我注意到我可以使用customId作为文档id,因此我已将updatebyquery更改为具有upsert的标准更新,并且它现在正在工作。谢谢@RussCam让我注意到了!
"dynamic_templates" : [
{
"string_fields" : {
"match" : "*",
"path_unmatch" : "customId",
"match_mapping_type" : "string",
"mapping" : {
"analyzer" : "autocomplete",
"search_analyzer" : "autocomplete_search",
"type" : "text"
}
}
}
]