简体   繁体   中英

expected [END_OBJECT] but got [FIELD_NAME]

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM