Elasticsearch - динамическое отображение с поддержкой нескольких полей - PullRequest
0 голосов
/ 16 января 2019

Можно ли добавлять новые поля с поддержкой multi-field динамически?

Мой индекс имеет свойства, которые будут известны только во время индексации. Таким образом, эти поля будут включены в динамическое отображение.

Но, когда новое поле добавляется динамически, мне нужно, чтобы оно отображалось как text и с тремя подполями: keyword, date (если оно соответствует dynamic_date_formats) и long .

С этими тремя подполями я буду в состоянии искать и объединять много запросов с максимальной производительностью.

Я знаю, что могу сделать «предварительное» сопоставление моего индекса с этими «динамическими полями», используя поля nested со свойствами key и value, чтобы я мог создать свойство value с этими тремя подполями. Но я не хочу создавать вложенное поле ключ / значение, потому что оно не очень быстро при выполнении агрегации с большим количеством документов.

1 Ответ

0 голосов
/ 16 января 2019

Я нашел это.

Динамические шаблоны - это ответ.

Очень просто:)

{
  "mappings": {
    "doc": {
      "dynamic_templates": [
        {
         "objs": {
            "match_mapping_type": "object",
            "mapping": {
                "type": "{dynamic_type}"
            }
         }  
        },
        {
          "attrs": {
            "match_mapping_type": "*",
            "mapping": {
              "type": "text",
              "fields": {
                "raw": {
                    "type": "keyword"
                },
                "long": {
                    "type": "long",
                    "ignore_malformed": true
                },
                "double": {
                    "type": "double",
                    "ignore_malformed": true
                },
                "date": {
                    "type": "date",
                    "format": "dd/MM/yyyy||dd/MM/yyyy HH:mm:ss||dd/MM/yyyy HH:mm",
                    "ignore_malformed": true
                }
              }
            }
          }
        }
      ],
      "dynamic": "strict",
      "properties": {
        "fixed": {
            "properties": {
                "aaa": {
                    "type": "text"
                },
                "bbb": {
                    "type": "long"
                },
                "ccc": {
                    "type": "date",
                    "format": "dd/MM/yyyy"
                }
            }
        },
        "dyn": {
            "dynamic": true,
            "properties": {
            }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...