Term Queries
Term queries are used for exact matching on structured fields. Unlike match queries, they do not perform analysis on the search terms.
Term Query
Matches documents that contain an exact term in a field:
<?php
use Zvonchuk\Elastic\Query\QueryBuilders;
$query = QueryBuilders::termQuery('status', 'active');
This generates:
{
"term": {
"status": {
"value": "active"
}
}
}
Terms Query
Matches documents that contain one or more exact terms in a field:
<?php
use Zvonchuk\Elastic\Query\QueryBuilders;
$query = QueryBuilders::termsQuery('tag', ['urgent', 'important']);
This generates:
{
"terms": {
"tag": ["urgent", "important"]
}
}
Range Query
Matches documents with values within a specified range:
<?php
use Zvonchuk\Elastic\Query\QueryBuilders;
$query = QueryBuilders::rangeQuery('price')
->gte('50.00')
->lt('100.00');
This generates:
{
"range": {
"price": {
"gte": "50.00",
"lt": "100.00"
}
}
}
Date Range Example
The range query works well with dates too:
<?php
use Zvonchuk\Elastic\Query\QueryBuilders;
$query = QueryBuilders::rangeQuery('created_at')
->gte('2023-01-01')
->lt('now');
Combining Term Queries with Bool Query
You can combine multiple term queries using a bool query:
<?php
use Zvonchuk\Elastic\Query\QueryBuilders;
$boolQuery = QueryBuilders::boolQuery()
->must(QueryBuilders::termQuery('status', 'active'))
->filter(QueryBuilders::rangeQuery('price')->lt('100.00'));