Несколько отображений для одного индекса в Elasticsearch 6 - PullRequest
0 голосов
/ 23 января 2019

У меня есть индекс, который содержит документы разных типов (здесь речь не идет о _type), и у каждого документа есть поле document_type, в котором указывается их тип. Можно ли определить сопоставления для каждого типа документа в этом индексе?

Ответы [ 3 ]

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

Использование одного имени поля с несколькими типами отображения в одном и том же индексе невозможно. Два варианта, которые я могу придумать: 1. Разделите разные типы документов на отдельные индексы. 2. Используйте разные имена полей для разных типов документов, чтобы каждое имя могло иметь различное отображение. Вы также можете использовать вложение, например: type_a.my_field и type_b.my_field, оба в одном индексе.

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

Можно ли определить сопоставления для каждого типа документа в этом индексе?

Нет, если вы думаете об использовании одного и того же имени поля с разными типами. Например, имя поля id типа string и integer не будет работать.

Наличие разных document_type в основном указывает на разные домены. Что вы можете сделать, это сгруппировать информацию по каждому соответствующему домену или типу. Например, сотрудник и проект, оба имеют идентификатор и имя, но разные типы в этом примере. Некоторые называют это вложением.

Пример отображения индекса:

PUT example
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }, 
  "mappings": {
    "doc": {
      "properties": {
        "employee": {
          "properties": {
            "id": {
              "type": "integer"
            },
            "name": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 64
                }
              }
            }
          }
        },
        "project": {
          "properties": {
            "id": {
              "type": "keyword"
            },
            "name": {
              "type": "keyword",
              "ignore_above": 32
            }
          }
        }
      }
    }
  }
}

Если вы пишете информацию, с разными типами.

PUT example/doc/1
{
  "employee": {
    "id": 4711,
    "name": "John Doe"
  },
  "project": {
    "id": "Project X",
    "name": "Firebrand"
  }
}

Другие поспорили бы хранить сотрудника и проект в отдельных индексах. Этот подход зависит от вашего сценария и также желателен. Вы позволяете обоим доменам развиваться отдельно друг от друга.

Наличие отдельного индекса сотрудника и проекта дает вам преимущество в отношении обслуживания. Для запроса некоторые утверждают, что вы можете группировать, чем с псевдонимом. В приведенном выше примере это не имеет смысла, так как типы полей различны. Поиск имени по analysed text field отличается от поиска по keyword. Запросы имеют смысл, если у вас есть такой же тип поля.

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

Нет, если вы хотите использовать один индекс, вам нужно определить одно отображение, объединяющее поля каждого типа документа.

Лучшим способом может быть определение отдельных индексов в одном кластере для каждого типа документа.Затем вы можете создать один индексный псевдоним , который будет псевдонимом для обоих этих индексов, если вы хотите иметь возможность запрашивать документы разных типов.Убедитесь, что все поля, существующие в обоих документах, имеют одинаковый тип данных в обоих сопоставлениях.

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