приоритет между numeric_detection и dynamic_templates - PullRequest
0 голосов
/ 09 июля 2020

Существуют приоритеты, основанные на последовательности в dynamic_templates, но есть ли какие-либо между numeric_detection и dynamic_templates?

Шаблоны обрабатываются по порядку - первое совпадение шаблон выигрывает.

Можно ли сказать, что dynamic_templates имеет более низкий (или более высокий) приоритет, чем numeric_detection?

Ответы [ 2 ]

1 голос
/ 09 июля 2020

numeric_detection не является шаблоном. Это field mapping. Когда вы указываете несколько templates, они будут обрабатываться по порядку.

Я попробовал следующее упражнение, чтобы подтвердить приоритет между numeric detection и dynamic templates.

Сопоставление:

{
    "dynamic_templates": [
      {
        "integers": {
          "match_mapping_type": "long",
          "mapping": {
            "type": "short"
          }
        }
      }
    ],
    "numeric_detection": true
}

Если он обнаруживает номер, у него есть два варианта. Один установить как long, что означает включение numeric_Detection, а другой, если он long, установить его как short, который обрабатывается dynamic_templates.

Затем проиндексированы данные ниже

{
 "whoami":"25"
}

Потом проверил маппинг. Я нашел это.

"properties": {
  "whoami": {
    "type": "short"
  }
}

Затем я попытался отключить отображение dynamic field.

{
  "dynamic_templates": [
    {
      "integers": {
        "match_mapping_type": "long",
        "mapping": {
          "type": "short"
        }
      }
    }
  ],
  "numeric_detection": false
}

На этот раз whoami сохраняется как text.

Таким образом, приоритет следующий.

  1. Dynami c сопоставление полей - высшее
  2. Dynami c сопоставление шаблонов - наименьшее

dynamic field указывает, какое правило должно применяться. Как только правила применяются до dynamic field mapping, пользовательские правила применяются до dynamic template mapping

0 голосов
/ 10 июля 2020

Спасибо за помощь Гиббса, я еще раз читал do c и протестировал больше демо.

Думаю, можно с уверенностью сказать, что dynamic templates вступит в силу, как только будут указаны следующие условия.

  • тип данных, обнаруженный Elasticsearch, с match_mapping_type.
  • имя поля с match и unmatch или match_pattern .
  • полный пунктирный путь к полю с path_match и path_unmatch.

Хотя первое условие смутило меня (которое Гиббс помог устранить эту путаницу), «тип данных» должен быть тип после field mapping.

Что касается правил сопоставления полей, мы могли бы проверить детали в динамике c сопоставлении полей .

  • строка

Либо поле даты (если значение проходит определение даты), либо двойное, либо длинное поле (если значение проходит числовое значение). c обнаружение) или текстовое поле с подполем ключевого слова. * 103 3 *

Демонстрация даст нам keyword для uid, используя match для указания шаблона динамики c:

GET my_index/_mapping

PUT my_index
{
  "mappings": {
    "numeric_detection": true,
    "dynamic_templates": [
      {
        "strings_as_keywords": {
          "match": "uid",
          "mapping": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }
    ]
  }
}

POST my_index/_doc/1
{
  "uid": "123"
}
...