порядковый номер против номера версии вasticsearch - PullRequest
0 голосов
/ 08 ноября 2019

Я читаю концепции Elassearch-7.4, и я узнал о двух областях. _seq_no и _version.

Согласно документации:

Версия

Returns a version for each search hit.

Порядковые номера и первичный термин

Returns the sequence number and primary term of the last modification to each search hit.

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

Я создал индекс test

PUT /test/_doc/_mapping
{
  "properties": {
    "total_price" : {
      "type": "integer"
    },
    "final_price": {
      "type": "integer"
    },
    "base_price": {
      "enabled": false
    }
  }
}

Я обновляю полный документ, используя PUT API.

PUT /test/_doc/2
{
  "total_price": 10,
  "final_price": 10,
  "base_price": 10
}

Оба _seq_noи _version увеличиваются в этом случае.

При выполнении частичных обновлений с использованием UPDATE API,

POST /test/_doc/2/_update
{
    "doc" : {
        "base_price" : 10000
    }
}

И _seq_no, и _version увеличиваются и в этом случае.

Итак, я не могу найти случай, когда меняется только одно поле, а другое нет.
Когда оба поля будут разными?

1 Ответ

1 голос
/ 08 ноября 2019

Порядковые номера были введены в ES 6.0.0. Незадолго до выхода этого релиза они были очень хорошо объяснены в этой статье блога .

Но в итоге,

  • version - это порядковый номер, которыйподсчитывает количество раз, когда документ был обновлен
  • _seq_no - это последовательное число, которое подсчитывает количество операций, которые произошли с индексом

Так что если вы создаете второй документ,вы увидите, что version и _seq_no будут разными.

Давайте создадим три документа:

POST test/_doc/_bulk
{"index": {}}
{"test": 1}
{"index": {}}
{"test": 2}
{"index": {}}
{"test": 3}

В ответе вы получите полезную нагрузку ниже.

{
  "took" : 166,
  "errors" : false,
  "items" : [
    {
      "index" : {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "d2zbSW4BJvP7VWZfYMwQ",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 0,
        "_primary_term" : 1,
        "status" : 201
      }
    },
    {
      "index" : {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "eGzbSW4BJvP7VWZfYMwQ",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 1,
        "_primary_term" : 1,
        "status" : 201
      }
    },
    {
      "index" : {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "eWzbSW4BJvP7VWZfYMwQ",
        "_version" : 1,
        "result" : "created",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 2,
        "_primary_term" : 1,
        "status" : 201
      }
    }
  ]
}

Как видно:

  • для всех документов, версия равна 1
  • для документа 1, _seq_no равна 0 (первая операция индексации)
  • для документа 2, _seq_no - 1 (вторая операция индексации)
  • для документа 3, _seq_no - 2 (третья операция индекса)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...