Почему мои индексные документы не могут быть извлечены по идентификатору после восстановления снимка из ES 6.4.2 в ES 7.6.1? - PullRequest
1 голос
/ 18 марта 2020

После обновления моего кластера ES с 6.4.2 до 7.6.1 и восстановления моментального снимка старого кластера документы по нескольким заданным индексам перестали извлекаться по идентификатору.

Это не работает после восстановления снимка .

GET myindex/_doc/c1d89b00-d030-11e3-bd52-f3718ac695f3

Если я дублирую документ:

PUT myindex/_doc/c1d89b00-d030-11e3-bd52-f3718ac695f3
{
   "name" : "dogs and cats",
   "notes" : "Imported",
   "myid" : "c1d89b00-d030-11e3-bd52-f3718ac695f3" // yes, it's redundant
}

Это неожиданно работает:

GET myindex/_doc/c1d89b00-d030-11e3-bd52-f3718ac695f3

Однако теперь у меня есть два документа с тот же ID.

(обновление не работает, потому что do c не может быть извлечено по идентификатору)

Определение индекса:

GET myindex
{
  "myindex" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "merge_id" : {
          "type" : "keyword"
        },
        "name" : {
          "type" : "text",
          "analyzer" : "index_ngram",
          "search_analyzer" : "search_ngram"
        },
        "notes" : {
          "type" : "text",
          "analyzer" : "index_ngram",
          "search_analyzer" : "search_ngram"
        },
        "myid" : {
          "type" : "keyword"
        }
      }
    },
    "settings" : {
      "index" : {
        "max_ngram_diff" : "48",
        "number_of_shards" : "5",
        "provided_name" : "myindex",
        "creation_date" : "1584420860612",
        "analysis" : {
          "filter" : {
            "my_ngram" : {
              "type" : "ngram",
              "min_gram" : "2",
              "max_gram" : "50"
            }
          },
          "analyzer" : {
            "index_ngram" : {
              "filter" : [
                "lowercase",
                "my_ngram"
              ],
              "type" : "custom",
              "tokenizer" : "keyword"
            },
            "default" : {
              "tokenizer" : "keyword"
            },
            "search_ngram" : {
              "filter" : "lowercase",
              "type" : "custom",
              "tokenizer" : "keyword"
            }
          }
        },
        "number_of_replicas" : "0",
        "uuid" : "uyp_WK3xRjucFRGhYDHbcQ",
        "version" : {
          "created" : "7060199"
        }
      }
    }
  }
}

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

1 Ответ

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

Почему-то после восстановления снимка старого кластера проблема невозможности получить документы по их идентификаторам, похоже, связана с количеством сегментов, используемых в этом индексе.

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

PUT /myindex/_settings
{
  "settings": {
    "index.routing.allocation.require._name": "instance-0000000000", 
    "index.blocks.write": true 
  }
}

POST myindex/_shrink/myindex_shrinked
{
  "settings": {
    "index.number_of_replicas": 0,
    "index.number_of_shards": 1, 
    "index.codec": "best_compression" 
  },
  "aliases": {
    "my_search_indices": {}
  }
}

PUT /myindex_shrinked/_settings
{
  "settings": {
    "index.routing.allocation.require._name": null, 
    "index.blocks.write": true 
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...