Теперь я хотел бы создать синоним для имени поля «titleSony». Например, titleSony => titleAll , поэтому, когда я ищу «titleAll», я также должен получить все документы с «titleSony».
Да, несколько. Elasticsearch имеет некоторое поведение по умолчанию, очень похожее на это, о котором я немного расскажу.
Функция, которую вы ищете, называется "Копировать в поле." Это позволяет вам указать, что термины в одном поле должны быть скопированы в другое. Это полезно для объединения терминов, которые, как вы ожидаете, будут соответствовать в одном поле, чтобы упростить ваш запрос, когда вы хотите сопоставить любое из нескольких полей.
В этом примере вы должны указать в своем сопоставлении, что термины в поле titleSony
должны быть скопированы в поле titleAll
. Предположительно, у вас должны быть другие поля (скажем, titleDisney
), которые также копируются в это поле. Таким образом, поиск по titleAll
будет эффективно соответствовать другим полям, термины которых копируются в него.
Фрагмент вашего сопоставления может выглядеть примерно так:
{
"movies" : {
"properties" : {
"titleSony" : { "type" : "string", "copy_to" : "titleAll" },
"titleDisney" : { "type" : "string", "copy_to" : "titleAll" },
"titleAll" : { "type" : "string" },
"cast" : { ... },
...
}
}
Ранее я упоминал, что Elasticsearch делает что-то подобное. По умолчанию создается специальное поле с именем _all
, в которое копируются все термины документа. Это поле позволяет создавать очень простые запросы для сопоставления с терминами, встречающимися в любом поле документа. Как видите, это довольно распространенное соглашение в Elasticsearch. (сопоставление Elasticsearch: _все поля. )
person
Nick Zadrozny
schedule
20.01.2015