"Похожие сообщения", как функциональность с использованием MS SQL Server?

У меня есть много магазинов статей в базе данных MS SQL Server 2005 в таблице под названием "Статьи -

"Articles (ArticleID, ArticleTitle, ArticleContent)"

Теперь мне нужен какой-то запрос SP или SQL, который мог бы вернуть мне аналогичную статью против любого ввода пользователя (очень похоже на "Похожие сообщения" в блогах или "Вопросы, относящиеся" в stackoverflow). Соответствие должно работать как с ArticleTitle, так и с ArticleContent. Запрос должен быть достаточно интеллектуальным, чтобы отсортировать результат на основе их релевантности.

Возможно ли это сделать в MS SQL Server 2005?

Ответ 1

Что-то вроде этого может работать, своего рода система ранжирования. Вам, вероятно, придется разбить строку в вашем приложении на построение строки SQL, но я использовал аналогичный метод для создания эффективного поиска по сайту.

Select
Top 10
ArticleID,
ArticleTitle,
ArticleContent
From
Articles
Order By
(Case When ArticleTitle = 'Article Title' Then 1 Else 0 End) Desc,
(Case When ArticleTitle = 'Article' Then 1 Else 0 End) Desc,
(Case When ArticleTitle = 'Title' Then 1 Else 0 End) Desc,
(Case When Soundex('Article Title') = Soundex(ArticleTitle) Then 1 Else 0 End) Desc,
(Case When Soundex('Article') = Soundex(ArticleTitle) Then 1 Else 0 End) Desc,
(Case When Soundex('Title') = Soundex(ArticleTitle) Then 1 Else 0 End) Desc,
(Case When PatIndex('%Article%Title%', ArticleTitle) > 0 Then 1 Else 0 End) Desc,
(Case When PatIndex('%Article%', ArticleTitle) > 0 Then 1 Else 0 End) Desc,
(Case When PatIndex('%Title%', ArticleTitle) > 0 Then 1 Else 0 End) Desc,
(Case When PatIndex('%Article%Title%', ArticleContent) > 0 Then 1 Else 0 End) Desc,
(Case When PatIndex('%Article%', ArticleContent) > 0 Then 1 Else 0 End) Desc,
(Case When PatIndex('%Title%', ArticleContent) > 0 Then 1 Else 0 End) Desc

Затем вы можете добавлять/удалять операторы case из предложения order by, чтобы улучшить список на основе ваших данных.

Ответ 2

Прежде всего, вам нужно определить, что означает подобие статьи.
Например, вы можете связать некоторую метаинформацию со статьями, например тегами.
Чтобы найти похожие статьи, вам нужно извлечь из них некоторые функции, например, вы можете создать полный текстовый индекс.

Вы можете использовать возможности полнотекстового поиска MSSQL 2005

-- Assuming @Title contains title of current articles you can find related articles runnig this query  
SELECT * FROM Acticles WHERE CONTAINS(ArticleTitle, @Title)

Ответ 3

Я думаю, что вопрос - это то, что "похоже" означает для вас. Если вы создаете поле для ввода пользователем каких-либо тегов, становится гораздо проще запрашивать.