Мне нужно выполнить поиск по нескольким столбцам из двух таблиц в моей базе данных, используя полнотекстовый поиск. Эти две таблицы содержат соответствующие столбцы с полным текстом.
Причина, по которой я выбираю полнотекстовый поиск: 1. Чтобы легко находить акцентированные слова (кафе) 2. Уметь оценивать по близости слова и т.д. 3. "Вы имели в виду XXX?" Функциональность
Вот структура таблицы фиктивная, чтобы проиллюстрировать проблему:
Table Book BookID Name (Full-text indexed) Notes (Full-text indexed) Table Shelf ShelfID BookID Table ShelfAuthor AuthorID ShelfID Table Author AuthorID Name (Full-text indexed)
Мне нужно выполнить поиск по имени книги, книжным заметкам и имени автора.
Я знаю два способа сделать это:
-
Использование полнотекстового индексированного представления:. Это был мой предпочтительный метод, но я не могу этого сделать, потому что для того, чтобы представление было полнотекстовым, оно должно быть schemabound, не иметь никаких внешних соединений, иметь уникальный индекс. Представление, которое мне нужно будет для получения моих данных, не удовлетворяет этим ограничениям (оно содержит много других связанных таблиц, из которых мне нужно получить данные).
-
Использование объединений в хранимой процедуре. Проблема с этим подходом заключается в том, что мне нужно, чтобы результаты сортировались по рангу. Если я делаю несколько объединений по таблицам, SQL Server не будет искать по нескольким полям по умолчанию. Я могу комбинировать два отдельных запроса CONTAINS по двум связанным таблицам, но я не знаю, как извлечь ранг в сочетании из двух поисковых запросов. Например, если я ищу "Артур", результаты как запроса книги, так и запроса автора должны быть приняты во внимание и взвешены соответственно.