У меня есть следующие две таблицы
таблица триггеров_ключей
CREATE TABLE trigger_keyword
(
id bigint NOT NULL,
keyword_array text[],
CONSTRAINT trigger_keyword_id PRIMARY KEY (id)
)
таблица триггеров_мессажа
CREATE TABLE trigger_message
(
id bigint NOT NULL,
message text NOT NULL,
trigger_keyword_id bigint,
CONSTRAINT trigger_message_id PRIMARY KEY (id)
)
У меня есть следующие тестовые данные
триггер_ключейtable
id keyword_array
-----------------------------------------------------
1 {weather, climate}
trigger_message table
id message trigger_keyword_id
-----------------------------------------------------
1 yes, the weather is good 1
2 expect rain 1
3 partly cloudy 1
Следующий запрос работает должным образом, если столбец ключевого слова в trigger_keyword
равен text
, но не работает, когда столбец text[]
SELECT m.message
FROM trigger_keyword AS k
JOIN trigger_message AS m ON k.id = m.trigger_keyword_id
WHERE to_tsvector('simple', 'tell me the weather')
@@ phraseto_tsquery('simple', k.keyword); <-- this would become k.keyword_array after removing the text column and adding a text[] column
Как я могу изменить приведенный выше запрос для работы с массивом текста вместо текста?
с текстовым массивом, я могу легко добавить больше ключевых слов, в данном случае "сказатьменя климат "также будет возвращать строки из таблицы trigger_message
Я знаю, что рекомендуемый способ сделать это - использовать таблицу мостов, но редактирование и сопоставление вещей становится громоздким, поэтому я хотел бы использовать массиввместо этого.