Коллеги, добрый день!
Есть 2 типа в одном индексе. Пусть это будет Компании и Товары. У компании есть поле company_name. Товары связаны с компаниями один ко многим, 1 компания - несколько товаров. Допустим, у товаров есть поле company_id, в который заносим идентификатор компании.
Нужно составить запрос, поиск по товарам, но чтобы искалось поисковое слово и с учетом поля company_name в типе компании, аналог JOIN в mysql, примерно так:
SELECT good_id FROM goods g INNER JOIN company c USING(company_id) WHERE c.company_name LIKE '%поисковое_слово%';
Можно, конечно, дублировать поле company_name и в типе Товары. Но так делать не хочется, т.к. каждый раз при изменении компанией ее названия придется менять его во всех товарах, которые к ней относятся.
Поиск приводит неизменно на nested запросы и has_child/has_parent запросы. Но никак не могу понять, чем они могут мне помочь..
Установленная версия ES 5.6.8
Заранее спасибо всем откликнувшимся!)
Оба типа должны быть проиндексированы соответствующим образом, чтобы у них было отношение parent/child. Надо также отметить, что в связи с переходом на 1 тип в одном индексе, начиная с версии 6.x лучше использовать join для этих целей.
Получилось, но наполовину... Запрос отрабатывает, но только по полю company_name родительского типа. В реальной ситуации нужно еще искать и фильтровать и по полям ребенка.
Соответственно, при таком запросе он ищет только по полю companyName, игнорируя caption и description. Не могу понять, где тогда их указывать. Плюс мне еще нужно фильтровать по полю countryId (см. mapping), тоже не понятно куда вставлять этот кусок кода:
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.