From 5fb3857ce04e06e2cd3b5f8a4d7dd01a02ebd84f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joonas=20Saraj=C3=A4rvi?= Date: Thu, 6 Jul 2023 13:05:11 +0300 Subject: [PATCH 1/2] AE-1814 Invert the logical operator for negative predicate At the moment, the only predicate that can be used for text fields and which includes a negation in it is the "not ilike" one. --- .../main/clj/solita/etp/service/energiatodistus_search.clj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search.clj b/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search.clj index f1299e6f2..0e593540b 100644 --- a/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search.clj +++ b/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search.clj @@ -192,9 +192,10 @@ :message (str "Unknown predicate: " predicate-name)}))) (defn- expand-bilingual-expression [formatter search-schema predicate field & values] - (let [[fi-sql & fi-values] (apply formatter search-schema predicate (str field "-fi") values) + (let [logical-op (if (= predicate "not ilike") "and" "or") + [fi-sql & fi-values] (apply formatter search-schema predicate (str field "-fi") values) [sv-sql & sv-values] (apply formatter search-schema predicate (str field "-sv") values)] - (concat [(str "((" fi-sql ")or(" sv-sql "))")] + (concat [(str "((" fi-sql ")" logical-op "(" sv-sql "))")] fi-values sv-values))) (defn predicate-expression->sql [search-schema expression] From edbb7e306b3075b5c1dd7f3b446ff7be5aa41207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joonas=20Saraj=C3=A4rvi?= Date: Thu, 6 Jul 2023 13:07:22 +0300 Subject: [PATCH 2/2] Use search splitter for :perustiedot :nimi The old implementation for targeting both nimi-fi and nimi-sv was broken, still searching only from the Finnish branch. Also increase test coverage so that it verifies that we can search from both languages. --- .../etp/service/energiatodistus_search.clj | 6 ++- .../service/energiatodistus_search_fields.clj | 4 +- .../service/energiatodistus_search_test.clj | 44 ++++++++++++++++++- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search.clj b/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search.clj index 0e593540b..b7f9e2e92 100644 --- a/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search.clj +++ b/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search.clj @@ -51,7 +51,8 @@ {:energiatodistus energiatodistus-schema/Energiatodistus2018} {:energiatodistus {:perustiedot - {:postinumero schema/Int}}} + {:nimi schema/Str + :postinumero schema/Int}}} {:laatija {:patevyystaso common-schema/Key :toteamispaivamaara common-schema/Date @@ -60,7 +61,8 @@ (deep/map-values second search-fields/computed-fields) geo-schema/Search)) -(def bilingual-fields #{"postinumero.label"}) +(def bilingual-fields #{"energiatodistus.perustiedot.nimi" + "postinumero.label"}) (def public-search-schema (schemas->search-schema diff --git a/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search_fields.clj b/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search_fields.clj index 2f48afeea..e6d789e27 100644 --- a/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search_fields.clj +++ b/etp-backend/src/main/clj/solita/etp/service/energiatodistus_search_fields.clj @@ -96,9 +96,7 @@ (def computed-fields "Computed field consists of sql expression and value schema [sql, schema]" {:energiatodistus - {:perustiedot - {:nimi ["energiatodistus.pt$nimi_fi || '__' || energiatodistus.pt$nimi_fi" schema/Str]} - :lahtotiedot + {:lahtotiedot {:rakennusvaippa (deep/deep-merge ua-fields osuus-lampohaviosta-fields)} :tulokset {:kaytettavat-energiamuodot diff --git a/etp-backend/src/test/clj/solita/etp/service/energiatodistus_search_test.clj b/etp-backend/src/test/clj/solita/etp/service/energiatodistus_search_test.clj index 1af9e9d79..f6b20031d 100644 --- a/etp-backend/src/test/clj/solita/etp/service/energiatodistus_search_test.clj +++ b/etp-backend/src/test/clj/solita/etp/service/energiatodistus_search_test.clj @@ -666,8 +666,7 @@ energiatodistus-adds laatija-id)] (sign-energiatodistukset! (map #(vec [laatija-id %]) energiatodistus-ids)) - {:laatija (assoc laatija :id laatija-id) - :energiatodistukset (zipmap energiatodistus-ids energiatodistus-adds)} + (t/testing "Simple search in Finnish" (let [results (search kayttaja-test-data/paakayttaja [[["ilike" "postinumero.label" "purola"]]] @@ -689,3 +688,44 @@ (t/is (= (count results) 2)) (doseq [et results] (t/is (= (get-in et [:perustiedot :postinumero]) "49270"))))))) + +(t/deftest search-by-nimi-both-languages-test + (let [[laatija-id _] (-> (laatija-test-data/generate-and-insert! 1) first) + energiatodistus-adds (concat + (map (fn [et] + (-> et + (assoc-in [:perustiedot :nimi-fi] "Talo 12499") + (assoc-in [:perustiedot :nimi-sv] "Hus 12499"))) + (energiatodistus-test-data/generate-adds 1 2018 true)) + (energiatodistus-test-data/generate-adds 3 2018 true)) + energiatodistus-ids (energiatodistus-test-data/insert! + energiatodistus-adds + laatija-id)] + (sign-energiatodistukset! (map #(vec [laatija-id %]) energiatodistus-ids)) + + (t/testing "Simple search in Finnish" + (let [results (search kayttaja-test-data/paakayttaja + [[["ilike" "energiatodistus.perustiedot.nimi" "%Talo 12499%"]]] + nil nil nil)] + (t/is (= (count results) 1)) + (doseq [et results] + (t/is (= (get-in et [:perustiedot :nimi-fi]) "Talo 12499")) + (t/is (= (get-in et [:perustiedot :nimi-sv]) "Hus 12499"))))) + (t/testing "Search in Swedish, using caps" + (let [results (search kayttaja-test-data/paakayttaja + [[["ilike" "energiatodistus.perustiedot.nimi" "%Hus 12499%"]]] + nil nil nil)] + (t/is (= (count results) 1)) + (doseq [et results] + (t/is (= (get-in et [:perustiedot :nimi-fi]) "Talo 12499")) + (t/is (= (get-in et [:perustiedot :nimi-sv]) "Hus 12499"))))) + (t/testing "Negation" + (let [results (search kayttaja-test-data/paakayttaja + [[["not ilike" "energiatodistus.perustiedot.nimi" "%12499%"]]] + nil nil nil)] + (t/is (= (count results) 3)))) + (t/testing "Negation so that it is hitting only one language" + (let [results (search kayttaja-test-data/paakayttaja + [[["not ilike" "energiatodistus.perustiedot.nimi" "Hus 12499"]]] + nil nil nil)] + (t/is (= (count results) 3))))))