Поля
Часто бывает полезно индексировать одно и то же поле разными способами для разных целей. Для этого служат многопольные поля. Например, поле string может быть отображено как поле text для полнотекстового поиска и как поле keyword для сортировки или агрегаций:
PUT my-index-000001
{
"mappings": {
"properties": {
"city": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
PUT my-index-000001/_doc/1
{
"city": "New York"
}
PUT my-index-000001/_doc/2
{
"city": "York"
}
GET my-index-000001/_search
{
"query": {
"match": {
"city": "york"
}
},
"sort": {
"city.raw": "asc"
},
"aggs": {
"Cities": {
"terms": {
"field": "city.raw"
}
}
}
} | Поле | |
| Поле | |
| Поле |
Вы можете добавить многопольные поля к существующему полю, используя API обновления отображения.
Отображение многопольного поля полностью отделено от отображения родительского поля. Многопольное поле не наследует никаких параметров отображения от родительского поля. Многопольные поля не изменяют исходное поле _source.
Многопольные поля с несколькими анализаторами
Другой случай использования многопольных полей — анализ одного и того же поля различными способами для повышения релевантности. Например, мы можем индексировать поле с помощью standard анализатора, который разбивает текст на слова, и снова с помощью english анализатора, который приводит слова к их корневой форме:
PUT my-index-000001
{
"mappings": {
"properties": {
"text": {
"type": "text",
"fields": {
"english": {
"type": "text",
"analyzer": "english"
}
}
}
}
}
}
PUT my-index-000001/_doc/1
{ "text": "quick brown fox" }
PUT my-index-000001/_doc/2
{ "text": "quick brown foxes" }
GET my-index-000001/_search
{
"query": {
"multi_match": {
"query": "quick brown foxes",
"fields": [
"text",
"text.english"
],
"type": "most_fields"
}
}
} | Поле | |
| Поле | |
| Индексировать два документа, один с | |
| Запрос обоих полей |
Поле text содержит термин fox в первом документе и foxes во втором документе. Поле text.english содержит fox для обоих документов, потому что foxes приводится к fox.
Строка запроса также анализируется с помощью standard анализатора для поля text и english анализатора для поля text.english. Приведенное к основе поле позволяет запросу foxes также соответствовать документу, содержащему только fox. Это позволяет нам сопоставить как можно больше документов. Кроме того, запросив не приведённое к основе поле text, мы улучшаем оценку релевантности документа, который точно соответствует foxes.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/multi-fields.html