Можно ли определить сопоставления для каждого типа документа в этом индексе?
Нет, если вы думаете об использовании одного и того же имени поля с разными типами. Например, имя поля 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
. Запросы имеют смысл, если у вас есть такой же тип поля.