change strategy for searching: use the AND between words, instead of OR

This commit is contained in:
2022-03-29 12:42:17 +02:00
parent 961c0a867c
commit de4f65fede
3 changed files with 9 additions and 9 deletions

View File

@@ -133,8 +133,8 @@ final class PersonACLAwareRepository implements PersonACLAwareRepositoryInterfac
$pertinence = [];
$pertinenceArgs = [];
$orWhereSearchClause = [];
$orWhereSearchClauseArgs = [];
$andWhereSearchClause = [];
$andWhereSearchClauseArgs = [];
if ('' !== $default) {
foreach (explode(' ', $default) as $str) {
@@ -145,15 +145,15 @@ final class PersonACLAwareRepository implements PersonACLAwareRepositoryInterfac
'(starts_with(LOWER(UNACCENT(lastname)), UNACCENT(LOWER(?))))::int';
array_push($pertinenceArgs, $str, $str, $str, $str);
$orWhereSearchClause[] =
$andWhereSearchClause[] =
'(LOWER(UNACCENT(?)) <<% person.fullnamecanonical OR ' .
"person.fullnamecanonical LIKE '%' || LOWER(UNACCENT(?)) || '%' )";
array_push($orWhereSearchClauseArgs, $str, $str);
array_push($andWhereSearchClauseArgs, $str, $str);
}
$query->andWhereClause(
implode(' OR ', $orWhereSearchClause),
$orWhereSearchClauseArgs
implode(' AND ', $andWhereSearchClause),
$andWhereSearchClauseArgs
);
} else {
$pertinence = ['1'];