Подобный объединению запрос для нескольких индексов - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть 2 сущности, хранящиеся в отдельных индексах:

  • City имеет отображение 2 полей: name:keyword и url:text.
  • Product имеет 2 сопоставления полей: name:keyword и city:text

Я бы хотел запросить все Product s по URL City.

Пример:

Given: Search all shirts by url "http://shirts-shop.com/frankfurt"

Then (step 1): Search all cities where url is "http://shirts-shop.com/frankfurt" — it will return "Frankfurt" city

Then (step 2): Search all shirts by city "Frankfurt"

В базах данных SQL довольно просто написать: нам просто нужно использовать запрос join. Как написать такой запрос в ElasticSearch 6.5 ?

WARN : объекты находятся в отдельных индексах, потому что, как сказано в документации, ElasticSearch, начиная с версии 6 , рекомендует использовать 1 индекс для сопоставления .

1 Ответ

0 голосов
/ 19 ноября 2018

Согласно моему пониманию, в URL указывается название города.

i.e. http://shirts-shop.com/<_city_>

Из этого мы можем извлечь название города. В индексе Продукт Я бы предложил сохранить тип данных. город как ключевое слово вместо текст (так что это непроанализировать).

Чтобы получить рубашки в <<em> _city_ >, используйте термин запрос:

{
  "bool": {
    "must": [
      {
        "terms": {
          "city": <_city_>
        }
      }
    ]
  }
}
...