fixed: narrow search on postal code with an 'AND' clause instead of 'OR' clause

This commit is contained in:
Julien Fastré 2022-07-10 22:00:04 +02:00
parent 1d8f25e2c8
commit 94c258e914

View File

@ -119,8 +119,8 @@ final class PostalCodeRepository implements ObjectRepository
$pertinenceClause = ['STRICT_WORD_SIMILARITY(canonical, UNACCENT(?))']; $pertinenceClause = ['STRICT_WORD_SIMILARITY(canonical, UNACCENT(?))'];
$pertinenceArgs = [$pattern]; $pertinenceArgs = [$pattern];
$orWhere = ['canonical %>> UNACCENT(?)']; $andWhere = ['canonical %>> UNACCENT(?)'];
$orWhereArgs = [$pattern]; $andWhereArgs = [$pattern];
foreach (explode(' ', $pattern) as $part) { foreach (explode(' ', $pattern) as $part) {
$part = trim($part); $part = trim($part);
@ -129,8 +129,8 @@ final class PostalCodeRepository implements ObjectRepository
continue; continue;
} }
$orWhere[] = "canonical LIKE '%' || UNACCENT(LOWER(?)) || '%'"; $andWhere[] = "canonical LIKE '%' || UNACCENT(LOWER(?)) || '%'";
$orWhereArgs[] = $part; $andWhereArgs[] = $part;
$pertinenceClause[] = $pertinenceClause[] =
"(EXISTS (SELECT 1 FROM unnest(string_to_array(canonical, ' ')) AS t WHERE starts_with(t, UNACCENT(LOWER(?)))))::int"; "(EXISTS (SELECT 1 FROM unnest(string_to_array(canonical, ' ')) AS t WHERE starts_with(t, UNACCENT(LOWER(?)))))::int";
$pertinenceClause[] = $pertinenceClause[] =
@ -139,7 +139,7 @@ final class PostalCodeRepository implements ObjectRepository
} }
$query $query
->setSelectPertinence(implode(' + ', $pertinenceClause), $pertinenceArgs) ->setSelectPertinence(implode(' + ', $pertinenceClause), $pertinenceArgs)
->andWhereClause(implode(' OR ', $orWhere), $orWhereArgs); ->andWhereClause(implode(' AND ', $andWhere), $andWhereArgs);
return $query; return $query;
} }