From 8563a3c03538600ae148b75debd31af16047e2d5 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Wed, 16 Sep 2020 17:57:24 +0200 Subject: KB73 Add full text search to post lists. Change-Id: Ib8333b39cef1d7035ab7fac0ff8a03b400adcb40 --- .../resources/META-INF/resources/cms2/base.css | 21 ++++ src/main/resources/db/changeLog-1.6.xml | 139 +++++++++++++++++++++ src/main/resources/db/changeLog.xml | 1 + .../resources/templates/benki/posts/postList.html | 14 ++- 4 files changed, 170 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/db/changeLog-1.6.xml (limited to 'src/main/resources') diff --git a/src/main/resources/META-INF/resources/cms2/base.css b/src/main/resources/META-INF/resources/cms2/base.css index 70d164c..c041364 100644 --- a/src/main/resources/META-INF/resources/cms2/base.css +++ b/src/main/resources/META-INF/resources/cms2/base.css @@ -353,6 +353,27 @@ elix-expandable-section.editor-pane::part(header) { flex-basis: content; } +#post-search-bar { + flex: 1; + + display: inline-flex; + flex-direction: row; + flex-wrap: nowrap; + min-width: 5em; +} + +#post-search-query { + flex: 1; + flex-basis: content; + min-width: 0; +} + +#post-search-bar input[type=submit] { + flex: 1; + flex-grow: 0; + flex-basis: content; +} + elix-expandable-section .expandable-section-title { margin-top: 0; margin-bottom: 0; diff --git a/src/main/resources/db/changeLog-1.6.xml b/src/main/resources/db/changeLog-1.6.xml new file mode 100644 index 0000000..d03f63b --- /dev/null +++ b/src/main/resources/db/changeLog-1.6.xml @@ -0,0 +1,139 @@ + + + + + + CREATE FUNCTION language_regconfig(language VARCHAR) + RETURNS regconfig + AS $$ + SELECT CASE + WHEN $1 = 'de' THEN 'german' + WHEN $1 = 'en' THEN 'english' + WHEN $1 = 'fr' THEN 'french' + ELSE 'simple' + END :: regconfig + $$ IMMUTABLE LANGUAGE SQL; + + + + CREATE INDEX bookmark_texts_search_idx ON benki.bookmark_texts + USING GIN (to_tsvector(language_regconfig(language), title || ' ' || description)); + + + + CREATE INDEX lazychat_message_texts_search_idx ON benki.lazychat_message_texts + USING GIN (to_tsvector(language_regconfig(language), content)); + + + + + + CREATE FUNCTION post_matches_websearch( + post_language TEXT, + post_text TEXT, + websearch_language TEXT, + websearch_text TEXT) + RETURNS BOOLEAN + AS $$ + SELECT to_tsvector(language_regconfig($1), $2) @@ websearch_to_tsquery(language_regconfig($3), $4) + $$ LANGUAGE SQL IMMUTABLE; + + + + CREATE FUNCTION post_matches_websearch( + post_tsvector tsvector, + websearch_language TEXT, + websearch_text TEXT) + RETURNS BOOLEAN + AS $$ + SELECT $1 @@ websearch_to_tsquery(language_regconfig($2), $3) + $$ LANGUAGE SQL IMMUTABLE; + + + + + + + + + CREATE INDEX bookmark_texts_search_terms_idx ON benki.bookmark_texts + USING GIN (search_terms); + + + + + + + CREATE INDEX lazychat_message_texts_search_terms_idx ON benki.lazychat_message_texts + USING GIN (search_terms); + + + + + + + + CREATE FUNCTION bookmark_search_term_update_trigger() + RETURNS trigger + AS $$ + BEGIN + NEW.search_terms := + setweight(to_tsvector(language_regconfig(NEW.language), coalesce(NEW.title, '')), 'A') || + setweight(to_tsvector(language_regconfig(NEW.language), coalesce(NEW.description, '')), 'B'); + RETURN NEW; + END + $$ LANGUAGE plpgsql; + + + + CREATE FUNCTION lazychat_message_search_term_update_trigger() + RETURNS trigger + AS $$ + BEGIN + NEW.search_terms := + to_tsvector(language_regconfig(NEW.language), coalesce(NEW.content,'')); + RETURN NEW; + END + $$ LANGUAGE plpgsql; + + + + CREATE TRIGGER bookmark_search_term_update + BEFORE INSERT OR UPDATE + ON benki.bookmark_texts + FOR EACH ROW + EXECUTE FUNCTION + bookmark_search_term_update_trigger(); + + + + CREATE TRIGGER lazychat_message_search_term_update + BEFORE INSERT OR UPDATE + ON benki.lazychat_message_texts + FOR EACH ROW + EXECUTE FUNCTION + lazychat_message_search_term_update_trigger(); + + + + + + UPDATE benki.bookmark_texts + SET search_terms = + setweight(to_tsvector(language_regconfig(language), coalesce(title, '')), 'A') || + setweight(to_tsvector(language_regconfig(language), coalesce(description, '')), 'B'); + + + + UPDATE benki.lazychat_message_texts + SET search_terms = + to_tsvector(language_regconfig(language), coalesce(content,'')); + + + + diff --git a/src/main/resources/db/changeLog.xml b/src/main/resources/db/changeLog.xml index 1c5c4ea..f1c0849 100644 --- a/src/main/resources/db/changeLog.xml +++ b/src/main/resources/db/changeLog.xml @@ -12,5 +12,6 @@ + diff --git a/src/main/resources/templates/benki/posts/postList.html b/src/main/resources/templates/benki/posts/postList.html index deccfcd..89cea69 100644 --- a/src/main/resources/templates/benki/posts/postList.html +++ b/src/main/resources/templates/benki/posts/postList.html @@ -6,6 +6,7 @@ {@java.lang.Integer previousCursor} {@java.lang.Integer nextCursor} {@java.lang.Integer pageSize} +{@java.lang.String searchQuery} {#include base.html} @@ -43,9 +44,12 @@ {/if}
- {#if hasPreviousPage}⇠ previous page{/if} - - {#if hasNextPage}next page ⇢{/if} +
+ + +
+ {#if hasPreviousPage}⇠ previous page{/if} + {#if hasNextPage}next page ⇢{/if}
@@ -127,9 +131,9 @@
- {#if hasPreviousPage}⇠ previous page{/if} + {#if hasPreviousPage}⇠ previous page{/if} - {#if hasNextPage}next page ⇢{/if} + {#if hasNextPage}next page ⇢{/if}
{/body} -- cgit v1.2.3