mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
adapt query to simplify join clauses (lightly improve perfs)
This commit is contained in:
parent
a2e705bd92
commit
f3829d3390
19
src/Bundle/ChillMainBundle/Controller/resquery.good.sql
Normal file
19
src/Bundle/ChillMainBundle/Controller/resquery.good.sql
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
SELECT
|
||||||
|
'tparty' AS key, jsonb_build_object('id', tparty.id) AS metadata, GREATEST(
|
||||||
|
STRICT_WORD_SIMILARITY(LOWER(UNACCENT('areams')), tparty.canonicalized),
|
||||||
|
STRICT_WORD_SIMILARITY(LOWER(UNACCENT('areams')), parent.canonicalized)
|
||||||
|
) + GREATEST(
|
||||||
|
(tparty.canonicalized LIKE '%s' || LOWER(UNACCENT('areams')) || '%')::int,
|
||||||
|
(parent.canonicalized LIKE '%s' || LOWER(UNACCENT('areams')) || '%')::int
|
||||||
|
) + COALESCE((LOWER(UNACCENT(cmpc.label)) LIKE '%' || LOWER(UNACCENT('areams')) || '%')::int * 0.3, 0) + 1 AS pertinence
|
||||||
|
FROM chill_3party.third_party AS tparty
|
||||||
|
LEFT JOIN chill_3party.third_party AS parent ON tparty.parent_id = parent.id
|
||||||
|
LEFT JOIN chill_main_address cma ON cma.id = COALESCE(parent.address_id, tparty.address_id)
|
||||||
|
LEFT JOIN chill_main_postal_code cmpc ON cma.postcode_id = cmpc.id
|
||||||
|
WHERE (((LOWER(UNACCENT('areams')) <<% tparty.canonicalized OR
|
||||||
|
tparty.canonicalized LIKE '%' || LOWER(UNACCENT('areams')) || '%')
|
||||||
|
OR
|
||||||
|
(LOWER(UNACCENT('areams')) <<% parent.canonicalized OR
|
||||||
|
parent.canonicalized LIKE '%' || LOWER(UNACCENT('areams')) || '%'))
|
||||||
|
AND tparty.active IS TRUE and (parent.active IS TRUE OR parent IS NULL))
|
||||||
|
ORDER BY pertinence DESC, tparty.id ASC LIMIT 500 OFFSET 0;
|
@ -71,12 +71,9 @@ class ThirdPartyApiSearch implements SearchApiInterface
|
|||||||
->setSelectKey('tparty')
|
->setSelectKey('tparty')
|
||||||
->setSelectJsonbMetadata("jsonb_build_object('id', tparty.id)")
|
->setSelectJsonbMetadata("jsonb_build_object('id', tparty.id)")
|
||||||
->setFromClause('chill_3party.third_party AS tparty
|
->setFromClause('chill_3party.third_party AS tparty
|
||||||
LEFT JOIN chill_main_address cma ON cma.id = tparty.address_id
|
|
||||||
LEFT JOIN chill_main_postal_code cmpc ON cma.postcode_id = cmpc.id
|
|
||||||
LEFT JOIN chill_3party.third_party AS parent ON tparty.parent_id = parent.id
|
LEFT JOIN chill_3party.third_party AS parent ON tparty.parent_id = parent.id
|
||||||
LEFT JOIN chill_main_address cma_p ON parent.address_id = cma_p.id
|
LEFT JOIN chill_main_address cma ON cma.id = COALESCE(parent.address_id, tparty.address_id)
|
||||||
LEFT JOIN chill_main_postal_code cmpc_p ON cma_p.postcode_id = cmpc_p.id')
|
LEFT JOIN chill_main_postal_code cmpc ON cma.postcode_id = cmpc.id');
|
||||||
->andWhereClause('tparty.active IS TRUE');
|
|
||||||
|
|
||||||
$strs = explode(' ', $pattern);
|
$strs = explode(' ', $pattern);
|
||||||
$wheres = [];
|
$wheres = [];
|
||||||
@ -102,8 +99,7 @@ class ThirdPartyApiSearch implements SearchApiInterface
|
|||||||
(parent.canonicalized LIKE '%s' || LOWER(UNACCENT(?)) || '%')::int
|
(parent.canonicalized LIKE '%s' || LOWER(UNACCENT(?)) || '%')::int
|
||||||
) + " .
|
) + " .
|
||||||
// take postcode label into account, but lower than the canonicalized field
|
// take postcode label into account, but lower than the canonicalized field
|
||||||
"COALESCE((LOWER(UNACCENT(cmpc.label)) LIKE '%' || LOWER(UNACCENT(?)) || '%')::int * 0.3, 0) + " .
|
"COALESCE((LOWER(UNACCENT(cmpc.label)) LIKE '%' || LOWER(UNACCENT(?)) || '%')::int * 0.3, 0)";
|
||||||
"COALESCE((LOWER(UNACCENT(cmpc_p.label)) LIKE '%' || LOWER(UNACCENT(?)) || '%')::int * 0.3, 0)";
|
|
||||||
$pertinenceArgs[] = [$str, $str, $str, $str, $str, $str];
|
$pertinenceArgs[] = [$str, $str, $str, $str, $str, $str];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user