Отклонить значения нумерации c для индексации для полей с типом данных text / keyword (ElaticSearch 6.2.3) - PullRequest
2 голосов
/ 03 апреля 2020

текстовый или ключевой тип данных позволяет вставлять числовые значения c.

шаблон индекса, как показано ниже:

{
    "index_patterns" : [ "temp-index" ],
    "mappings": {
        "docs" : {
            "properties": {
                "username" : {
                    "type": "keyword"
                }
            }
        }
    }
}

документ вставлен:

{
    "username" : 10
}

, так как вышеуказанный документ успешно вставлен, возможно ли отклонить такие цифры c значения для типа данных text / keyword.

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете использовать настройку coerce, но я думаю, что она работает только наоборот - т.е. не позволяет индексировать строки как числа:

PUT roddo
{
  "mappings": {
    "properties": {
      "username": {
        "type": "integer",
        "coerce": false
      }
    }
  }
}

Таким образом, пытаясь

POST roddo/_doc
{
  "username": "10"
}

выдаст ошибку Integer value passed as String.


В качестве альтернативы, вы можете расширить функциональность имени пользователя:

PUT roddo2
{
  "mappings": {
    "properties": {
      "username": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          },
          "integer": {
            "type": "integer",
            "coerce": true,
            "ignore_malformed": true
          }
        }
      }
    }
  }
}

, которая будет пытаться выполнить Принудительно, но не вызовет исключение при сбое.

После синхронизации ваших документов вы сможете найти те, которые не имеют целочисленные имена пользователей:

GET roddo2/_search
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "username.integer"
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...