Elasticsearch Обновление / Удаление Вложенных

Я просмотрел несколько примеров и документации, и нашел решение обновить вложенный объект в этом наборе результатов.

  1. Я могу добавить один (если он не существует)
  2. Я могу добавить к нему (если таковой существует)
  3. Не могу понять, как удалить выбранную запись.

Есть ли способ, который я могу использовать (с помощью клиента php), чтобы добавить запись, если она не существует / обновить запись, если она существует / удалить вторую запись.

Я унаследовал эту проблему, и я новичок в упругом поиске.

Благодарю.

    {
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "products",
"_type": "categories",
"_id": "AUpRjtKZfXI7LIe9OpNx",
"_score": 1,
"_source": {
"name": "Primary",
"description": "Primary Category",
"slug": "Primary",
"created": "2014-12-16 00:25:22",
"parent": [
{
"name": "First One",
"description": "Test",
"id": "ae74ea4e2e865ed3fd60c18a06e69c65",
"slug": "first-one"},
{
"name": "Second One",
"description": "Testing Again",
"id": "c8dbe5143c8dfd6957fa33e6cea7a0a8",
"slug": "second-one"}
]
}
}
]
}
}

2

Решение

Вы хотите сделать все три в одной операции?

Удаление второго вложенного объекта достигается с помощью скрипта, который удаляет второй элемент:

PUT /products
{
"mappings": {
"categories": {
"properties": {
"parent": {
"type": "nested",
"properties": {
"name":    { "type": "string"  },
"description": { "type": "string"  },
"id":     { "type": "string", "index": "not_analyzed"   },
"slug":   { "type": "string"   }
}
}
}
}
}
}

PUT /products/categories/1
{
"name": "Primary",
"description": "Primary Category",
"slug": "Primary",
"created": "2014-12-16 00:25:22",
"parent": [
{
"name": "First One",
"description": "Test",
"id": "ae74ea4e2e865ed3fd60c18a06e69c65",
"slug": "first-one"},
{
"name": "Second One",
"description": "Testing Again",
"id": "c8dbe5143c8dfd6957fa33e6cea7a0a8",
"slug": "second-one"}
]
}

POST /products/categories/1/_update
{
"script" : "ctx._source.parent.remove(1)",
"lang": "groovy"}

GET /products/categories/1

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

$params = [
'index' => 'products',
'type' => 'categories',
'id' => 1,
'body' => [
'script' => 'ctx._source.parent.remove(1)',
'lang' => 'groovy'
]
];

$result = $client->update($params);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector