#elasticsearch
#elasticsearch
Вопрос:
Я использую несколько полей во многих своих сопоставлениях. В документе эластичного поиска есть указание на то, что несколько полей следует заменить параметром «поля». См http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_multi_fields.html#_multi_fields
Это работает нормально. Однако для доступа к нескольким полям как к одному полю в документации рекомендуется указывать параметр copy_to вместо параметра path (см. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html#_accessing_fields)
Может кто-нибудь привести пример такого определения сопоставления (таким образом, используя параметр «поля» в сочетании с «copy_to»).
У меня сложилось впечатление, что если вы используете параметр fields, вам все равно нужно указать параметр path. И если вы используете copy_to, вам больше не нужно использовать подход с несколькими полями; поля просто становятся отдельными полями, а данные одного поля копируются в другое во время индексации.
Надеюсь, кто-нибудь может помочь.
спасибо, Марк
Комментарии:
1. Я изо всех сил пытался понять концепцию многополей; «copy_to» еще больше запутал меня. Я надеюсь, что мы получим достойный ответ на ваш вопрос.
Ответ №1:
Я думаю, что эту copy_to
опцию можно рассматривать как более чистый вариант функции с несколькими полями (то есть fields
опции). Оба они просты в использовании, когда вы хотите «скопировать» значения поля в одно или несколько других полей (для применения разных правил сопоставления). Однако, если вам нужно «скопировать» значения из нескольких полей в одно и то же поле (то есть, когда вам нужно пользовательское _all
поле), вы должны добавить эту path
опцию в сопоставление, если вы используете несколько полей. С другой стороны, с помощью этой copy_to
опции вы можете просто указать несколько исходных полей на одно и то же поле назначения.
Ответ №2:
Смотрите это: https://www.elastic.co/guide/en/elasticsearch/reference/1.6/_multi_fields.html
copy_to позволит вам объединять разные поля, такие как first_name и last_name, в full_name
в то время как multi field используется, когда вы хотите определить несколько способов индексации вашего поля. Например
// Document mapping
{
"properties": {
"name": {
"fields": {
"name_metaphone": {
"type": "string",
"analyzer": "mf_analyzer"
},
"name_exact": {
"index": "not_analyzed",
"type": "string"
}
},
"type": "multi_field"
}
}
}