Я пытаюсь улучшить функциональность поиска на моих веб-форумах. У меня есть таблица сообщений, и у каждого сообщения есть (среди других менее интересных вещей):
- PostID , уникальный идентификатор для отдельной записи.
- ThreadID , идентификатор темы, которой принадлежит сообщение. В теме может быть любое количество сообщений.
- Текст , потому что форум был бы скучным без него.
Я хочу написать эффективный запрос, который будет искать цепочки слов в темах форума, и он должен возвращать совпадение для любого ThreadID, для которого есть сообщения, включающие все поисковые слова. Например, предположим, что в теме 9 есть сообщение 1001 со словом «кошка», а также сообщение 1027 со словом «шляпа». Я хочу, чтобы поиск cat hat возвратил удар по теме 9.
Это кажется простым требованием, но я не знаю эффективного способа сделать это. Использование обычных возможностей FREETEXT и CONTAINS для N'cat AND hat 'не возвращает никаких совпадений в приведенном выше примере, поскольку слова существуют в разных сообщениях, даже если эти сообщения находятся в одной и той же теме. (Насколько я могу судить, при использовании CREATE FULLTEXT INDEX я должен дать ему свой индекс по первичному ключу PostID и не могу сказать, чтобы он индексировал все сообщения с одинаковым ThreadID вместе.)
Решение, которое у меня есть на данный момент, работает, но отстой: ведите отдельную таблицу, содержащую полный объединенный текст сообщения каждой темы, и создавайте полнотекстовый индекс для THAT. Я ищу решение, которое не требует, чтобы я держал дубликат копии всего текста каждой темы на моих форумах. Есть идеи? Я что-то упускаю из виду?