Результаты фильтра Fos elastica с идентификаторами записей массива

У меня есть таблица SQL, в которой много записей. Когда я ищу, я не хочу использовать все результаты, но я хочу, чтобы они были среди тех идентификаторов, которые мне нужны.

Я добавил «term» к этому и добавил «addMust» к boolQuery. Но результата нет. 'addShould', как я добавляю, без поиска по моим критериям.

// only the results of the ids in the data_ids array.
$finder = $this->container->get('fos_elastica.finder.xxxxx');
$boolQuery = new \Elastica\Query\BoolQuery();

$fieldQuery = new \Elastica\Query\Match();
$fieldQuery->setFieldQuery('name', $searchKey);
$fieldQuery->setFieldFuzziness('name', 1);
$boolQuery->addShould($fieldQuery);

$termQuery = new \Elastica\Query\Term();
$termQuery->setTerm('id', $data_ids);
$boolQuery->addShould($termQuery); // Without my criteria
//$boolQuery->addMust($termQuery); // No result

$vars = $finder->find($boolQuery, $limit);

Образец !!!

// seaching id's.
$data_ids = [1,2,3,12,13,16,17,24,65,234,657,45];

если я использую addMust; всегда выводится;

[]

если я использую addShould ; образец вывода;

[
        {
            "station": {
                "id": 8,
                "name": "ETC"
            },
            "area": {
                "id": 1,
                "name": "ETC"
            },
            "city": {
                "id": 2,
                "name": "Istanbul"
            },
            "district": {
                "id": 2,
                "name": "Besiktas"
            }
        }
    ]

но станции id 8 нет в массиве $data_ids.

Как я могу решить эту проблему.


person Caner Ergez    schedule 08.05.2019    source источник


Ответы (1)


Попробуй это:

$termsQuery = new \Elastica\Query\Term();
$termsQuery->setTerms('ids', $data_ids); // note: $data_ids is an array
$boolQuery->addMust($termQuery);
person Lukas Zmoginas    schedule 07.03.2020