I've an error with elasticsearch :
"query_parsing_exception: expected [END_OBJECT] but got [FIELD_NAME], possibly too many query clauses"
I use elasticsearch with PHP, this is my search :
$search = [
'index' => $this->getParameter('elastic_search')['index'],
'type' => 'profile',
'body' => [
'query' => [
'bool' => [
'must' => [
'range' => [
'address.latitude' => [
'gte' => $offer->getAddress()->getLatitude() - 0.05,
'lte' => $offer->getAddress()->getLatitude() + 0.05,
],
'address.longitude' => [
'gte' => $offer->getAddress()->getLongitude() - 0.05,
'lte' => $offer->getAddress()->getLongitude() + 0.05,
],
'budget' => [
'gte' => $offer->getPrice() - 100,
'lte' => $offer->getPrice() + 100,
],
],
'bool' => [
"term" => [
"type" => 1
]
]
]
]
],
'from' => $request->get('start', 0),
'size' => $request->get('limit', 4),
'sort' => [],
'_source' => ['exclude' => 'user'],
]
];
What is the problem please ?
Each range
query must be in its own array element and all bool/must
queries must be enclosed in an array. You can do it like this:
$search = [
'index' => $this->getParameter('elastic_search')['index'],
'type' => 'profile',
'body' => [
'query' => [
'bool' => [
'must' => [
[
'range' => [
'address.latitude' => [
'gte' => $offer->getAddress()->getLatitude() - 0.05,
'lte' => $offer->getAddress()->getLatitude() + 0.05,
]
]
],
[
'range' => [
'address.longitude' => [
'gte' => $offer->getAddress()->getLongitude() - 0.05,
'lte' => $offer->getAddress()->getLongitude() + 0.05,
],
],
],
[
'range' => [
'budget' => [
'gte' => $offer->getPrice() - 100,
'lte' => $offer->getPrice() + 100,
],
],
],
[
"term" => [
"type" => 1
]
]
]
]
],
'from' => $request->get('start', 0),
'size' => $request->get('limit', 4),
'sort' => [],
'_source' => ['exclude' => 'user'],
]
];
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.