Я считаю, что вы можете достичь того, что вы хотите без copy_to
. Позвольте мне показать вам, как и почему вам это не нужно.
Как сделать полнотекстовый запрос и запрос на точное совпадение в одном поле?
Это можно сделать с помощью атрибута отображения fields
. В основном со следующим фрагментом отображения:
PUT producten_prd_5_test_new
{
"aliases": {},
"mappings": {
"boek": {
"properties": {
"hoofdtitel": {
"type": "text", <== analysing for full text search
"fields": {
"keyword": {
"type": "keyword" <== analysing for exact match
},
"suggest": {
"type": "completion", <== analysing for suggest
"analyzer": "simple",
"preserve_separators": false,
"preserve_position_increments": true,
"max_input_length": 50
}
}
}
}
}
}
}
вы будете указывать Elasticsearch индексировать одно и то же поле три раза: один для полнотекстового поиска, один для точного соответствия и один для подсказки.
Точный поиск можно будет выполнить с помощью запроса term , например:
GET producten_prd_5_test_new/_search
{
"query": {
"term": {
"hoofdtitel.keyword": "The Nature of the Firm in the Oil Industry"
}
}
}
Почему поле exact_hoofdtitel
не появляется в возвращенном документе?
Поскольку copy_to
не меняет источник:
Исходное поле _source не будет изменено, чтобы показать скопированное
значения.
Работает как поле _all
, что позволяет объединять значения нескольких полей в одном воображаемом поле и анализировать его особым образом.
Имеет ли смысл вводить copy_to
в поле index: false
?
При index: false
поле не будет проанализировано и не будет доступно для поиска (как в вашем примере, поле exact_hoofdtitel.keyword
).
Может все же иметь смысл сделать это, если вы хотите выполнить агрегирование ключевых слов в этом поле:
GET producten_prd_5_test/_search
{
"aggs": {
"by copy to": {
"terms": {
"field": "exact_hoofdtitel.keyword"
}
}
}
}
Это вернет что-то вроде:
{
"aggregations": {
"by copy to": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "The Nature of the Firm in the Oil Industry",
"doc_count": 1
}
]
}
}
}
Надеюсь, это поможет!