Elasticsearch - отображение полей из других индексов - PullRequest
0 голосов
/ 05 августа 2020

Как я могу определить отображение в Elasticsearch 7 для индексации документа со значением поля из другого индекса? Например, если у меня есть индекс users, который имеет сопоставление для name, email и account_number, но значение account_number фактически находится в другом индексе с именем accounts в поле number.

Я пробовал что-то подобное без особого успеха (в результатах я вижу только «name», «email» и «account_id»):

PUT users/_mapping
{
  "properties": {
    "name": {
      "type": "text"
    },
    "email": {
      "type": "text"
    },
    "account_id": {
      "type": "integer"
    },
    "accounts": {
      "properties": { 
        "number":  {
          "type": "text"
        }
      }
    }
  }
}

Индекс accounts имеет следующее отображение:

{
  "properties": {
    "name": {
      "type": "text"
    },
    "number": {
      "type": "text"
    }
  }
}

1 Ответ

1 голос
/ 06 августа 2020

Насколько я понимаю, вы хотите реализовать объединение полей, как это обычно делается в реляционных базах данных. В elasticsearch это возможно, только если документы находятся в одном индексе. ( Ссылка на действие c). Но мне кажется, что в вашем случае вам нужно работать по-другому, я думаю, ваш объект Account должен быть вложенным для пользователя.

PUT /users/_mapping
{
  "mappings": {
    "properties": {
      "account": {
        "type": "nested"
       }
     }
   } 
}

Вы можете продолжить поиск, как если бы это был отдельный документ.

GET /users/_search
{
  "query": {
    "nested": {
      "path": "account",
      "query": {
        "bool": {
          "must": [
            { "match": { "account.number": 1 } }
          ]
        }
      }
    }
  }
}
...