Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ElasticSearch嵌套-使用UpdateByQuery创建不存在的字段或更新现有字段 - Fatal编程技术网

ElasticSearch嵌套-使用UpdateByQuery创建不存在的字段或更新现有字段

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

我是elasticsearch(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;
在这一点上我很迷路,我错过了什么

多谢各位

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