1

我对弹性搜索相当陌生,我正在使用Elastic App Search

所以我试图通过 MongoDB Realm App 更新弹性应用程序搜索中的数据,该应用程序基本上提供了 CRUD 操作的触发器。

我能够添加文档或更新现有字段。

但问题是我无法向数组字段添加元素。我想从数组中添加或删除元素,经过一些研究我发现它可以使用一些脚本来完成:

"script": {
  "source": "ctx._source.fieldToUpdate.add(elementToAdd);",
  "lang": "painless"
}

但它只是不工作。我正在使用REST API在弹性应用搜索中添加或更新数据。我正在使用弹性云托管服务。

更新 - 1

我正在使用 ES App Search,我创建并将引擎命名为“文章”,当我尝试使用 kibana 运行查询时,我不得不使用一些奇怪的名称“.ent-search-engine-documents-article”。所以我尝试在 Elastic Search REST API 中使用相同的名称

POST /.ent-search-engine-documents-article/_update/docid

它工作得非常好,但我只想使用 APP Search 的 REST API 来执行相同的工作。

4

1 回答 1

0

要对通过 AppSearch 存储的数据执行 CRUD 操作,您应该使用Documents API


AppSearch 不处理嵌套对象,仅提供 4 种字段类型:文本、数字、日期和地理位置。如果您要发布对象,它将按照您在评论中的描述将它们展平和串化。

数组也是如此,因此您不能只将元素添加到包含数组的字段,因为它只是一个文本字段,您需要重写整个字段(尽管它确实将它们检测为数组并处理每个元素例如,如果您将该字段用作构面,则单独使用)。

至于如何使用 AppSearch REST API 打补丁,这里有一个受官方文档启发的小例子:

curl -X PATCH 'https://[instance id].ent-search.[region].[provider].cloud.es.io:443/api/as/v1/engines/articles/documents' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer private-xxxxxxxxxxxxxxxxxxxx' \
-d '[
  { "id": "your_article_id", 
    "source": "your article source",
    "lang": "painless" }
]'

还有几种编程语言的客户端,您可能会发现它们有用或更直观的使用。


您为引擎看到的奇怪名称,例如“.ent-search-engine-documents-article”是 ElasticSearch 上的基础索引,您通常不希望直接操作它们。

于 2022-01-27T01:41:53.033 回答