ElasticSearch переопределяет отображение текста на объект - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь переопределить сопоставление для поля.

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

Индекс по умолчанию имеет отображение для поля «сообщения» в виде текста, но мне нужно сделать так, чтобы оно обрабатывалось как объект, а его поля были индексируемыми / доступными для поиска.

Это шаблон индекса по умолчанию с порядком 10.

{
  "mappings": {
    "_default_": {
      "dynamic_templates": [
        {
          "message_field": {
            "mapping": {
              "index": true,
              "norms": false,
              "type": "text"
            },
            "match": "message",
            "match_mapping_type": "string"
          }
        },
        ...
      ],
      "properties": {
        "message": {
          "doc_values": false,
          "index": true,
          "norms": false,
          "type": "text"
        },
        ...
      }
    }
  },
  "order": 10,
  "template": "project.*"
}

И вот мое переопределение:

{
  "template" : "project.*",
  "order" : 100,
  "dynamic_templates": [
    {
      "message_field": {
        "mapping": {
          "type": "object"
        },
        "match": "message"
      }
    }
  ],
  "mappings": {
    "message": {
      "enabled": true,
      "properties": {
        "tag": {"type": "string", "index": "not_analyzed"},
        "requestId": {"type": "integer"},
        ...
      }
    }
  }
}

Это хорошо работает, но я в итоге определил все поля (tag, requestId, ...) в объекте "message".

Есть ли способ сделать все поля в объекте "message" индексируемыми / доступными для поиска?

Вот пример документа:

{
  "level": "30",
  ...
  "kubernetes": {
    "container_name": "data-sync-server",
    "namespace_name": "alitest03",
    ...
  },
  "message": {
    "tag": "AUDIT",
    "requestId": 1234,
    ...
    },
  }
  ...
}

Пробовал много вещей,но я не могу заставить его работать.

Я использую ElasticSearch версии 2.4.4.

1 Ответ

0 голосов
/ 01 октября 2018

Вы можете использовать свойство path_match в вашем динамическом отображении:

Что-то вроде:

{
  "template": "project.*",
  "order": 100,
  "mappings": {
    "<your document type here>": {
      "dynamic_templates": [
        {
          "message_field": {
            "mapping": {
              "type": "object"
            },
            "match": "message"
          }
        },
        {
          "message_properties": {
            "path_match": "message.*",
            "mapping": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      ]
    }
  }
}

Но вам, возможно, придется различать строку / число с помощьюmatch_mapping_type

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