Построитель DSL запросов ElasticSearch в Yii2 (или автономный)

Насколько я понимаю, единственный способ сделать запрос к ElasticSearch в Yii2 — запустить ElasticModel::find()->query($query), где $query — это сложный массив, содержащий фактический запрос, написанный на DSL запроса ElasticSearch.

Запрос огромен и быстро становится неуправляемым. Для SQL Yii2 предоставляет мощный класс построителя запросов, который поддерживает множество полезных методов, таких как andWhere(). Для ElasticSearch все сводится к одному гигантскому выражению запроса, очень похожему на построение строки выражения SQL вручную.

Есть ли какая-нибудь высокоуровневая оболочка для запроса DSL ElasticSearch для Yii2? Если нет, есть ли отдельная библиотека с аналогичной функциональностью?


person Beowulfenator    schedule 06.08.2015    source источник
comment
Мы также ищем это, есть ли прогресс в поиске решения?   -  person Kalle Samuelsson    schedule 16.10.2015
comment
Мне потребовалось некоторое время, чтобы привыкнуть к парадигме ES. Все запросы в значительной степени вложены и самодостаточны. Поэтому я создаю части запросов как отдельные запросы, а затем объединяю их вместе. Это достаточно управляемо для меня.   -  person Beowulfenator    schedule 16.10.2015
comment
Да, мы вроде в той же схеме здесь. Спасибо   -  person Kalle Samuelsson    schedule 19.10.2015
comment
Также есть elastica, но я не пробовал.   -  person Beowulfenator    schedule 19.10.2015
comment
В итоге мы написали собственный класс для создания json-query-object, который мы отправляем в ES через yii/elasticsearch/query. Не супер динамично, но работает.   -  person Kalle Samuelsson    schedule 27.10.2015


Ответы (1)


Если вы собираетесь собирать эластичную версию 1.6, я создал построитель запросов для своей компании и опубликовал здесь

Вы будете использовать его как автономный построитель запросов, и в конце вам нужно будет получить окончательный массив запросов и передать его исполнителю запросов.

Чтобы установить его, вы можете просто использовать composer composer require itvisionsy/php-es-orm или загрузить заархивированную версию здесь.

Ссылка выше содержит несколько примеров, и вот копия:

//build the query using different methods
$query = \ItvisionSy\EsMapper\QueryBuilder::make()
            ->where('key1','some value') //term clause
            ->where('key2',$intValue,'>') //range clause
            ->where('key3','value','!=') //must_not term clause
            ->where('key4', ['value1','value2']) //terms clause
            ->where('email', '@hotmail.com', '*=') //wildcard search for all @hotmail.com emails
            ->sort('key1','asc') //first sort option
            ->sort('key2',['order'=>'asc','mode'=>'avg']) //second sort option
            ->from(20)->size(20) //results from 20 to 39
            ->toArray();

//modify the query as you need
$query['aggs']=['company'=>['terms'=>['field'=>'company']]];

//then execute it against a type query
$result = TypeQuery::query($query);
//i am not sure about Yii way to execute, according to the question, it should be:
$result = ElasticModel::find()->query($query); 

Пакет также включает простой класс ElasticSearch ORM, который может быть вам полезен. Взгляните на это здесь.

Надеюсь, это поможет вам...

person mhh1422    schedule 25.03.2016