diff --git a/src/main/java/at/procon/dip/search/repository/DocumentTrigramSearchRepositoryImpl.java b/src/main/java/at/procon/dip/search/repository/DocumentTrigramSearchRepositoryImpl.java index a2a6975..c8375b6 100644 --- a/src/main/java/at/procon/dip/search/repository/DocumentTrigramSearchRepositoryImpl.java +++ b/src/main/java/at/procon/dip/search/repository/DocumentTrigramSearchRepositoryImpl.java @@ -19,9 +19,9 @@ public class DocumentTrigramSearchRepositoryImpl implements DocumentTrigramSearc @Override public List search(SearchExecutionContext context, int limit, double threshold) { String scoreExpr = "GREATEST(" + - "similarity(COALESCE(d.title, ''), :queryText), " + - "similarity(COALESCE(d.summary, ''), :queryText), " + - "similarity(COALESCE(dtr.text_body, ''), :queryText))"; + "doc.similarity(COALESCE(d.title, ''), :queryText), " + + "doc.similarity(COALESCE(d.summary, ''), :queryText), " + + "doc.similarity(COALESCE(dtr.text_body, ''), :queryText))"; StringBuilder sql = new StringBuilder("SELECT " + "d.id AS document_id, " + @@ -38,9 +38,9 @@ public class DocumentTrigramSearchRepositoryImpl implements DocumentTrigramSearc "LEFT(COALESCE(dtr.text_body, COALESCE(d.summary, d.title, '')), 400) AS snippet, " + scoreExpr + " AS score, " + "CASE " + - "WHEN similarity(COALESCE(d.title, ''), :queryText) >= similarity(COALESCE(d.summary, ''), :queryText) " + - " AND similarity(COALESCE(d.title, ''), :queryText) >= similarity(COALESCE(dtr.text_body, ''), :queryText) THEN 'DOCUMENT_TITLE' " + - "WHEN similarity(COALESCE(d.summary, ''), :queryText) >= similarity(COALESCE(dtr.text_body, ''), :queryText) THEN 'DOCUMENT_SUMMARY' " + + "WHEN doc.similarity(COALESCE(d.title, ''), :queryText) >= doc.similarity(COALESCE(d.summary, ''), :queryText) " + + " AND doc.similarity(COALESCE(d.title, ''), :queryText) >= doc.similarity(COALESCE(dtr.text_body, ''), :queryText) THEN 'DOCUMENT_TITLE' " + + "WHEN doc.similarity(COALESCE(d.summary, ''), :queryText) >= doc.similarity(COALESCE(dtr.text_body, ''), :queryText) THEN 'DOCUMENT_SUMMARY' " + "ELSE 'REPRESENTATION_TEXT' END AS matched_field " + "FROM doc.doc_text_representation dtr " + "JOIN doc.doc_document d ON d.id = dtr.document_id " + diff --git a/src/main/resources/db/migration/V9__doc_search_slice1_support.sql b/src/main/resources/db/migration/V9__doc_search_slice1_support.sql index d797ad9..863c71d 100644 --- a/src/main/resources/db/migration/V9__doc_search_slice1_support.sql +++ b/src/main/resources/db/migration/V9__doc_search_slice1_support.sql @@ -1,26 +1,26 @@ -- Slice 1 generic lexical search support. -- Adds PostgreSQL full-text and trigram search infrastructure for DOC-side search. -CREATE EXTENSION IF NOT EXISTS pg_trgm; +CREATE EXTENSION IF NOT EXISTS pg_trgm with schema doc; -ALTER TABLE DOC.doc_text_representation +ALTER TABLE doc.doc_text_representation ADD COLUMN IF NOT EXISTS search_config VARCHAR(64); -ALTER TABLE DOC.doc_text_representation +ALTER TABLE doc.doc_text_representation ADD COLUMN IF NOT EXISTS search_vector tsvector; CREATE INDEX IF NOT EXISTS idx_doc_text_repr_search_vector - ON DOC.doc_text_representation + ON doc.doc_text_representation USING GIN (search_vector); CREATE INDEX IF NOT EXISTS idx_doc_document_title_trgm - ON DOC.doc_document - USING GIN (title gin_trgm_ops); + ON doc.doc_document + USING GIN (title doc.gin_trgm_ops); CREATE INDEX IF NOT EXISTS idx_doc_document_summary_trgm - ON DOC.doc_document - USING GIN (summary gin_trgm_ops); + ON doc.doc_document + USING GIN (summary doc.gin_trgm_ops); CREATE INDEX IF NOT EXISTS idx_doc_text_repr_text_trgm - ON DOC.doc_text_representation - USING GIN (text_body gin_trgm_ops); + ON doc.doc_text_representation + USING GIN (text_body doc.gin_trgm_ops);