Elasticsearch. Использование фильтров в поиске (Query DSL)
Elasticsearch обеспечивает богатый, гибкий, язык запросов, называемый DSL (domain-specific language) - запрос, который позволяет строить гораздо более сложные, устойчивые запросы.
Команда:
GET /megacorp/employee/_search { "query" : { "filtered" : { "filter" : { "range" : { "age" : { "gt" : 20 } } }, "query" : { "match" : { "last_name" : "smith" } } } } }
"filter" : { "range" : { - диапазонный фильтр "age" : { "gt" : 20 } - ищем сотрудников по фамилии smith старше 20 лет (параметр - gt) } }
CURL:
pretty - возвращает данные в формате JSON и отформатированном виде (с пробелами и табами)
$curl -XPOST 'localhost:9200/megacorp/employee/_search?pretty' -d ' { "query" : { "filtered" : { "filter" : { "range" : { "age" : { "gt" : 20 } } }, "query" : { "match" : {"last_name" : "smith"} } } } }'
PHP:
require 'vendor/autoload.php'; $client = Elasticsearch\ClientBuilder::create()->build(); $params = [ 'index' => 'megacorp', 'type' => 'employee', 'body' => [ 'query' => [ 'filtered' => [ 'filter' => [ 'range' => [ 'age' => [ 'gt'=> 20 ] ] ], 'query' => [ 'match' => [ 'last_name' => 'smith' ] ], ], ] ] ]; try { $response = $client->search($params); } catch (Exception $e) { var_dump($e->getMessage()); } print_r($response);
Yii2:
$params = [ 'filtered' => [ 'filter' => [ 'range' => [ 'age' => [ 'gt'=> 20 ] ] ], 'query' => [ 'match' => [ 'last_name' => 'smith' ] ], ], ]; $model = Megacorp::find()->query($params)->all();
var_dump($model);
Дополнительно
- Elasticsearch. Что такое Elasticsearch и как его установить
- Elasticsearch. Добавление данных (индексация)
- Elasticsearch. Извлечение данных
- Elasticsearch. Поиск, фильтры - Query DSL
- Elasticsearch. Полнотекстовый поиск
- Elasticsearch. Выделение результата поиска
- Elasticsearch. Обновление, удаление документа
Предыдущая часть: Elasticsearch. Извлечение данных
Комментарии
Комментарии отсутствуют, Вы можете быть первым