Существует ли простой способ найти все сообщения, у которых есть еще 2 указанных тега?Например, допустим, есть теги "style", "men", "women", "sale"
Классическим способом является использование сводной таблицы: posts <-> posts_tags <->теги
Вы можете кодировать свои теги вот так, потому что это самый простой способ (поддерживает целостность, внешние ключи, позволяет легко сканировать список тегов и т. д.).
ЭтоУ way есть приличная производительность для небольшого количества постов и небольшого количества тегов, но это громоздкий запрос (вам понадобится некоторая агрегация, INTERSECT или 1 JOIN на тег) и чрезвычайно медленный, если теги не очень избирательны.
Очевидно, что для поиска, который вы хотите выполнить, это отстой.Таким образом, у вас есть 2 варианта:
1 - материализуйте список идентификаторов тегов сообщения внутри столбца INTEGER [] в таблице сообщений, поместите в него индекс gist (или gin) и используйте "integer"Оператор "массив содержит", который индексируется, очень быстро и тривиально для запроса.
2 - просто поместите ваши теги как текст и добавьте к ним полнотекстовый индекс
Оба очень быстрыес преимуществом перед целочисленным массивом.