Поисковая система базы данных - сортировка по релевантности в соответствии с определенными правилами релевантности - PullRequest
1 голос
/ 19 октября 2010

Я только что получил список требований для новой функции поиска для наших сайтов.Это веб-сайты издателей книг, так что это основная область, в которой мы работаем.Данные хранятся на сервере базы данных Microsoft SQL 2005 (SP3) с включенным полным текстом.

Теперь в требованиях указывается, что поиск можно выполнять в трех областях: название книги, имена авторов и тексты книг.Это само по себе достаточно легко сделать с тремя отдельными запросами.Тем не менее, это еще не все.В требованиях указано, что результаты поиска должны возвращаться примерно в следующем порядке:

  • Полное совпадение названий
  • Полное совпадение имен авторов
  • Частичное совпадение названий
  • Полные совпадения фамилии автора
  • Частичные совпадения фамилии автора
  • Частичные совпадения фамилии автора
  • Совпадения текста книги

Кроме того, существуют дополнительные требования:

  • Названия от самого издателя должны быть заказаны выше, чем у соседнего издателя (в одной базе данных есть книги от дюжины или около того издателей)
  • При полном совпадении названиянайдено, другие книги того же автора должны быть отображены (снова заголовки одного и того же издателя имеют приоритет над другим - автор может публиковать с несколькими издателями)

Множество подобных правил.

Итак, скажем, у вас есть книга Джонсона, написанная автором Питом Джонсоном (или кем бы то ни было).Поисковый запрос 'john' должен затем вернуть следующее (ish):

  • Johnson (книга) (частичное совпадение названия)
  • Pete Johnson (частичное совпадение фамилии)

И поисковый запрос 'Джонсон':

  • Джонсон (книга) (полное совпадение названия)
  • Джонсон (книга) (частичное совпадение названия) (уже опущенов результатах)
  • Пит Джонсон (автор) (полное совпадение фамилии автора)
  • Пит Джонсон (автор) (совпадение фамилии частично автора) (опущено)
  • Пит Джонсон (автор) (частичное совпадение полного имени автора) (опущено)
  • Джонсон (книга) (совпадение текста книги) (опущено)

... В любом случае.Это в основном требования, и я просто хотел напечатать это.Теперь на несколько вопросов:

  • Существуют ли какие-либо книги или статьи по этой конкретной теме, на которые вы могли бы указать мне?
  • Как бы это лучше всего реализовать?Может ли это быть сделано в виде набора базовых запросов (отдельные запросы для каждого поискового требования, пост-обработка для удаления дубликатов и объединения результатов), или это может быть сделано в одном запросе?
  • Или мне нужнонаписать приложение, которое индексирует таблицу и создает свои собственные индексы и т. п., которые в свою очередь выполняют поисковые запросы?

Я как бы цепляюсь за идеи и предложения здесь.

1 Ответ

1 голос
/ 19 октября 2010

Есть функции CONTAINSTABLE и FREETEXTTABLE - они возвращают столбец RANK, который является "рейтингом релевантности".Вероятно, эти функции и некоторые сложные упорядочения по нетекстовым столбцам будут работать.

Если вы решите внедрить FTS в своем приложении, взгляните на сторонние решения. Lucene (или Lucene.NET ), вероятно, хорошо для начала.

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