Теперь я хотел бы создать синоним названия поля "titleSony". Например, titleSony => titleAll, поэтому, когда я ищу «titleAll», я должен получить все документы с «titleSony».
Да, несколько. У Elasticsearch есть поведение по умолчанию, очень похожее на это, о котором я немного поразмычу.
Функция, которую вы ищете, называется «Copy to field». Это позволяет указать, что термины в одном поле должны быть скопированы в другой. Это полезно для объединения терминов, которые вы ожидаете сопоставить, в одно поле, чтобы упростить ваш запрос, если вы хотите совместить с любым из нескольких полей.
В этом примере вы должны указать в своем отображении, что поля в поле 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 mapping: _all field.)