diff --git a/IDHANMigration/src/100-active_tag_mappings.sql b/IDHANMigration/src/100-active_tag_mappings.sql new file mode 100644 index 0000000..678d0b3 --- /dev/null +++ b/IDHANMigration/src/100-active_tag_mappings.sql @@ -0,0 +1,4 @@ +CREATE INDEX ON active_tag_mappings (tag_id) INCLUDE (record_id) WHERE ideal_tag_id IS NULL; +CREATE INDEX ON active_tag_mappings (ideal_tag_id) INCLUDE (record_id) WHERE ideal_tag_id IS NOT NULL; + +CREATE INDEX ON active_tag_mappings_parents (tag_id) INCLUDE (record_id); \ No newline at end of file diff --git a/IDHANMigration/src/101-file_info.sql b/IDHANMigration/src/101-file_info.sql new file mode 100644 index 0000000..bdc3182 --- /dev/null +++ b/IDHANMigration/src/101-file_info.sql @@ -0,0 +1 @@ +DROP INDEX file_info_record_id_idx; -- Not needed because file_info_pkey exists \ No newline at end of file diff --git a/IDHANServer/src/core/search/SearchBuilder.cpp b/IDHANServer/src/core/search/SearchBuilder.cpp index 3f1fdaa..90fcf64 100644 --- a/IDHANServer/src/core/search/SearchBuilder.cpp +++ b/IDHANServer/src/core/search/SearchBuilder.cpp @@ -28,14 +28,14 @@ std::string SearchBuilder::construct( } constexpr std::string_view domain_filter_template { - "filter_{0} AS (SELECT record_id FROM active_tag_mappings WHERE effective_tag_id = {1} AND tag_domain_id = " - "ANY($1) UNION DISTINCT SELECT record_id FROM active_tag_mappings_parents WHERE tag_id = {1} AND tag_domain_id " - "= ANY($1))" + "filter_{0} AS ( SELECT DISTINCT record_id FROM active_tag_mappings WHERE tag_id = {1} AND ideal_tag_id IS NULL AND tag_domain_id = ANY($1) UNION DISTINCT SELECT DISTINCT record_id FROM active_tag_mappings WHERE ideal_tag_id = {1} AND tag_domain_id = ANY($1) UNION DISTINCT SELECT DISTINCT record_id FROM active_tag_mappings_parents WHERE tag_id = {1} AND tag_domain_id = ANY($1) )" + // "filter_{0} AS (SELECT record_id FROM active_tag_mappings WHERE ideal_tag_id IS NULL AND tag_id = {1} AND tag_domain_id = " + // "ANY($1) UNION DISTINCT SELECT record_id FROM active_tag_mappings_parents WHERE tag_id = {1} AND tag_domain_id " + // "= ANY($1))" }; constexpr std::string_view domainless_filter_template { - "filter_{0} AS (SELECT record_id FROM active_tag_mappings WHERE effective_tag_id = {1} UNION DISTINCT SELECT " - "record_id FROM active_tag_mappings_parents WHERE tag_id = {1})" + "filter_{0} AS ( SELECT DISTINCT record_id FROM active_tag_mappings WHERE tag_id = {1} AND ideal_tag_id IS NULL UNION DISTINCT SELECT DISTINCT record_id FROM active_tag_mappings WHERE ideal_tag_id = {1} UNION DISTINCT SELECT DISTINCT record_id FROM active_tag_mappings_parents WHERE tag_id = {1} )" }; m_bind_domains = filter_domains;