mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-16 22:43:19 +00:00
Fix concept query builder & private field wrapping
Concept queries on private fields where adding a « must » clause to restrict match on certain collections only. Boolean queries do not enforce one « should » clause match at least once a « must » clause is added to it. To make queries on private fields more robust & performants, these are now wrapped in a filtered query with a collection filter.
This commit is contained in:
@@ -50,8 +50,8 @@ class QueryHelper
|
||||
private static function restrictQueryToCollections(array $query, array $collections)
|
||||
{
|
||||
$wrapper = [];
|
||||
$wrapper['bool']['must'][0]['terms']['base_id'] = $collections;
|
||||
$wrapper['bool']['must'][1] = $query;
|
||||
$wrapper['filtered']['filter']['terms']['base_id'] = $collections;
|
||||
$wrapper['filtered']['query'] = $query;
|
||||
return $wrapper;
|
||||
}
|
||||
|
||||
@@ -86,9 +86,7 @@ class QueryHelper
|
||||
// Right to query on a private field is dependant of document collection
|
||||
// Here we make sure we can only match on allowed collections
|
||||
$query = $query_builder($fields);
|
||||
$collection_query = [];
|
||||
$collection_query['terms']['base_id'] = $collections_map[$hash];
|
||||
$query = self::applyBooleanClause($query, 'must', $collection_query);
|
||||
$query = self::restrictQueryToCollections($query, $collections_map[$hash]);
|
||||
$queries[] = $query;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user