Разница между несколькими полями и копированием в эластичный поиск?

#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"
    }
  }
}