Имя эластичного индекса, имеющее символ # - PullRequest
0 голосов
/ 25 сентября 2018

Когда я имел в виду 6.4 версии документов , я заметил следующее об ограничении имени индекса:

Не может включать \, /, *,?, ", <,>, |, (пробел), ,, #

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

Вход: запрос PUT: http://localhost:9200/tw>itter

Выход:

    {
    "error": {
        "root_cause": [
            {
                "type": "invalid_index_name_exception",
                "reason": "Invalid index name [tw>itter], must not contain the following characters [ , \", *, \\, <, |, ,, >, /, ?]",
                "index_uuid": "_na_",
                "index": "tw>itter"
            }
        ],
        "type": "invalid_index_name_exception",
        "reason": "Invalid index name [tw>itter], must not contain the following characters [ , \", *, \\, <, |, ,, >, /, ?]",
        "index_uuid": "_na_",
        "index": "tw>itter"
    },
    "status": 400
}

Обратите внимание, строка ошибки не имеет символа # в качестве ограничения.

Недопустимоимя индекса [tw> itter], не должно содержать следующие символы [, \ ", *, \, <, |, ,,>, /,?]

Итак, кто-нибудь может подтвердить,# разрешен ли?PS: Если я попытался создать индекс с #, он создаст индекс, но обрежет все, кроме #.

1 Ответ

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

Символ # не допускается в имени индекса, даже если вы закодируете его URL-адрес, он не будет работать:

PUT test%23hash

Результат:

{
  "error": {
    "root_cause": [
      {
        "type": "invalid_index_name_exception",
        "reason": "Invalid index name [test#hash], must not contain '#'",
        "index_uuid": "_na_",
        "index": "test#hash"
      }
    ],
    "type": "invalid_index_name_exception",
    "reason": "Invalid index name [test#hash], must not contain '#'",
    "index_uuid": "_na_",
    "index": "test#hash"
  },
  "status": 400
}

Окончательныйисточником истины является код, и мы можем видеть в Strings.java (L376-377) , что запрещенные символы '\\', '/', '*', '?', '"', '<', '>', '|', ' ', ','

Однако, это не вся история,1014 *MetaDataIndexTemplateService class также имеет интересный метод validate, который отклоняет все вышеперечисленные символы, а также символ #.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...