Полнотекстовый поиск по многим отношениям - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующие таблицы

enter image description here

Таблица ключевых слов

CREATE TABLE trigger_keyword
(
    id bigint NOT NULL,
    keyword text NOT NULL,
    CONSTRAINT trigger_keyword_id PRIMARY KEY (id)
)

Это таблица мостов

CREATE TABLE trigger_keyword_trigger_message
(
    trigger_keyword_id bigint NOT NULL,
    trigger_message_id bigint NOT NULL,
    CONSTRAINT trigger_keyword_trigger_message_trigger_keyword_id_fkey FOREIGN KEY (trigger_keyword_id)
        REFERENCES public.trigger_keyword (id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE NO ACTION,
    CONSTRAINT trigger_keyword_trigger_message_trigger_message_id_fkey FOREIGN KEY (trigger_message_id)
        REFERENCES public.trigger_message (id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE NO ACTION
)

таблица сообщений

CREATE TABLE trigger_message
(
    id bigint NOT NULL,
    message text NOT NULL,
    CONSTRAINT trigger_message_id PRIMARY KEY (id)
)

У меня есть список строк вне базы данных PostgreSQL, который я буду запускать в цикле.

Предположим, у нас есть следующие ключевые слова в таблице trigger_keyword

Таблица триггерных ключевых слов

id  keyword
----------------------------------------
1   hi
2   hello
3   the weather
4   the climate

Таблица триггерных сообщений

id  message
-----------------------------------------
1   Hi how is your day?
2   Hello, have a wonderful day
3   Looks sunny today
4   Excellent, no rain today
5   looks like we'll have showers today

Допустим, одна из наших строк - Hi Robot!, тогда запрос SQL должен вернуть Hi how is your day?или Hello, have a wonderful day;он должен выбрать один из них случайно.Он должен делать то же самое, если строка содержит hello robot вместо hi robot, поскольку hi и hello находятся в таблице ключевых слов.

И если строка содержит tell me the weather, тогда запрос SQLдолжен возвращать Looks sunny today или Excellent, no rain today или looks like we'll have showers today в случайном порядке.

Я полагаю, мне придется использовать полнотекстовый поиск для этого?

Я впервые использую таблицу мостов, я вручную вставляю отношения в таблицу мостов?

1 Ответ

0 голосов
/ 29 ноября 2018

Вы должны определить ограничение первичного ключа для таблицы «мост», которая содержит оба столбца.

Полнотекстовый поиск, как указано в этот ответ является одним из способов сделать это.

Чтобы случайным образом выбрать одну строку результатов, вы можете добавить к запросу следующее:

ORDER BY random() LIMIT 1

Чтобы вставить в таблицы, вы можете использовать предложение DEFAULT с последовательностью в определениистолбцы id и используйте INSERT ... RETURNING для получения значений для таблицы мостов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...