Может ли Flexiblesearch с узлом обновлять только определенное поле без перезаписи? - PullRequest
0 голосов
/ 20 марта 2020

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

_source:
...
"produto_tags" : [
            {
              "id_produto_cor" : "1623153806",
              "tags" : []
            },
            {
             "id_produto_cor" : "875623985732",
             "tags": []
            },
            {...}
...

Мне нужно вставить в это поле другой объект без перезаписи всего produto_tags

data to be inserted:
             {
             "id_produto_cor" : "312411",
             "tags": []
            },

и мой окончательный документ будет выглядеть так:

_source:
...
"produto_tags" : [
            {
              "id_produto_cor" : "1623153806",
              "tags" : []
            },
            {
             "id_produto_cor" : "875623985732",
             "tags": []
            },
            {
             "id_produto_cor" : "312411",
             "tags": []
            }
]

Я использую NODE js, я использую это, но он переписывает то, что я положил:

 const query = { 
      doc: {
        nome_relatorio: nome_relatorio,
        produto_tags: produto_tags,
        referencia_tags: referencia_tags,
      }
    };
    return await esClient.update({
        index: indexName,
        body: query,
        id: id,
        method: 'post',
        type: typeDoc,  
    })

1 Ответ

0 голосов
/ 20 марта 2020

1. Вы можете использовать update_by_query api

POST <index_name>/_update_by_query
{
  "script": {
    "source": "ctx._source.produto_tags.add(params.product)",
    "params": {
      "product": {
        "product_id": "1004600287",
        "tags": []
      }
    }
  },
  "query": {
    "match_all": {} --> select the document
  }
}

2. Обновление API

POST <index_name>/_update/<doc_id>
{
  "script": {
    "source": "ctx._source.produto_tags.add(params.product)",
    "lang": "painless",
    "params": {
      "product": {
        "product_id": "11",
        "tags": []
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...