«Подобные сообщения», как функциональность, используя MS SQL Server? - PullRequest
2 голосов
/ 02 сентября 2008

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

"Articles (ArticleID, ArticleTitle, ArticleContent)"

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

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

Ответы [ 3 ]

1 голос
/ 02 сентября 2008

Нечто подобное может сработать, своего рода система ранжирования. Возможно, вам придется разделить строку в вашем приложении, чтобы создать строку 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, чтобы улучшить список на основе ваших данных.

0 голосов
/ 02 сентября 2008

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

0 голосов
/ 02 сентября 2008

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

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

-- Assuming @Title contains title of current articles you can find related articles runnig this query  
SELECT * FROM Acticles WHERE CONTAINS(ArticleTitle, @Title)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...