Я только что получил список требований для новой функции поиска для наших сайтов.Это веб-сайты издателей книг, так что это основная область, в которой мы работаем.Данные хранятся на сервере базы данных Microsoft SQL 2005 (SP3) с включенным полным текстом.
Теперь в требованиях указывается, что поиск можно выполнять в трех областях: название книги, имена авторов и тексты книг.Это само по себе достаточно легко сделать с тремя отдельными запросами.Тем не менее, это еще не все.В требованиях указано, что результаты поиска должны возвращаться примерно в следующем порядке:
- Полное совпадение названий
- Полное совпадение имен авторов
- Частичное совпадение названий
- Полные совпадения фамилии автора
- Частичные совпадения фамилии автора
- Частичные совпадения фамилии автора
- Совпадения текста книги
Кроме того, существуют дополнительные требования:
- Названия от самого издателя должны быть заказаны выше, чем у соседнего издателя (в одной базе данных есть книги от дюжины или около того издателей)
- При полном совпадении названиянайдено, другие книги того же автора должны быть отображены (снова заголовки одного и того же издателя имеют приоритет над другим - автор может публиковать с несколькими издателями)
Множество подобных правил.
Итак, скажем, у вас есть книга Джонсона, написанная автором Питом Джонсоном (или кем бы то ни было).Поисковый запрос 'john' должен затем вернуть следующее (ish):
- Johnson (книга) (частичное совпадение названия)
- Pete Johnson (частичное совпадение фамилии)
И поисковый запрос 'Джонсон':
- Джонсон (книга) (полное совпадение названия)
- Джонсон (книга) (частичное совпадение названия) (уже опущенов результатах)
- Пит Джонсон (автор) (полное совпадение фамилии автора)
- Пит Джонсон (автор) (совпадение фамилии частично автора) (опущено)
- Пит Джонсон (автор) (частичное совпадение полного имени автора) (опущено)
- Джонсон (книга) (совпадение текста книги) (опущено)
... В любом случае.Это в основном требования, и я просто хотел напечатать это.Теперь на несколько вопросов:
- Существуют ли какие-либо книги или статьи по этой конкретной теме, на которые вы могли бы указать мне?
- Как бы это лучше всего реализовать?Может ли это быть сделано в виде набора базовых запросов (отдельные запросы для каждого поискового требования, пост-обработка для удаления дубликатов и объединения результатов), или это может быть сделано в одном запросе?
- Или мне нужнонаписать приложение, которое индексирует таблицу и создает свои собственные индексы и т. п., которые в свою очередь выполняют поисковые запросы?
Я как бы цепляюсь за идеи и предложения здесь.