Упругая запись serach upsert со сложным полем _id - PullRequest
0 голосов
/ 31 августа 2018

Мне нужно добавить массовые записи в индекс эластичного поиска, где _id является комбинацией нескольких полей из сообщения. Могу ли я сделать это если это можно сделать, пожалуйста, дайте мне образец JSON для того же. Привет

Образец _id поля, я ищу что-то вроде ниже

        {
            "_index": "kpi_aggr",
            "_type": "KPIBackChannel",
            "_id": "<<<combination of name , period_type>>>",
            "_score": 1,
            "_source": {
                "name": "kpi-v1",
                "period_type": "w",
                "country": "AL",
                "pg_name": "DENTAL CARE",
                "panel_type": "retail",
                "number_of_records_with_proposal": 10000,
                "number_of_proposals": 80000,
                "overall_number_of_records": 2000,
                "@timestamp": 1442162810
            }
        }

1 Ответ

0 голосов
/ 03 сентября 2018

Естественно, вы можете указать свои собственные идентификаторы документов Elasticsearch во время вызова к Index API :

PUT kpi_aggr/KPIBackChannel/kpi-v1,w
{
  "name": "kpi-v1",
  "period_type": "w",
  "country": "AL",
  "pg_name": "DENTAL CARE",
  "panel_type": "retail",
  "number_of_records_with_proposal": 10000,
  "number_of_proposals": 80000,
  "overall_number_of_records": 2000,
  "@timestamp": 1442162810
}

Вы также можете сделать это во время _bulk вызова API :

POST _bulk
{ "index" : { "_index" : "kpi_aggr", "_type" : "KPIBackChannel", "_id" : "kpi-v1,w" } }
{"name":"kpi-v1","period_type":"w","country":"AL","pg_name":"DENTAL CARE","panel_type":"retail","number_of_records_with_proposal":10000,"number_of_proposals":80000,"overall_number_of_records":2000,"@timestamp":1442162810}

Обратите внимание, что Elasticsearch заменит документ новой версией.

Если вы выполните эти два запроса по пустому индексу, тогда запрос по идентификатору документа:

GET kpi_aggr/KPIBackChannel/kpi-v1,w

даст вам следующее:

{
  "_index": "kpi_aggr",
  "_type": "KPIBackChannel",
  "_id": "kpi-v1,w",
  "_version": 2,
  "found": true,
  "_source": {
    "name": "kpi-v1",
    "period_type": "w",
    "country": "AL",
    "pg_name": "DENTAL CARE",
    "panel_type": "retail",
    "number_of_records_with_proposal": 10000,
    "number_of_proposals": 80000,
    "overall_number_of_records": 2000,
    "@timestamp": 1442162810
  }
}

Уведомление "_version": 2, которое в нашем случае указывает на то, что документ был проиндексирован дважды, следовательно, был выполнен "upsert" (но в целом предполагается использовать для Optimistic Concurrency Control ).

Надеюсь, это поможет!

...