Как сравнить текстовое поле одной записи со всеми другими записями на сервере SQL, чтобы получить, например, 5 самых связанных записей?
Примером функциональных возможностей, которые мне нужны, являются различные плагины связанных сообщений для Wordpress, которые создают список ссылок на сообщения, связанные с просматриваемым в данный момент сообщением.
Ваше здоровье, Иэн





Вот, пожалуйста, от превосходного Роберта Кейна:
Вам нужно использовать CONTAINSTABLE, это возвращает столбец RANK, который вы можете использовать для сортировки.
SELECT TOP 5 [Key] FROM CONTAINSTABLE ([YourFullText],'SomethingToSearch')
ORDER BY [RANK] DESC
Спасибо за эти ответы. Я знаком с упомянутыми функциями, но не уверен, что они делают то, что мне нужно. Например:
SELECT P.id, 'Product' AS Type, FT.rank, C.url + '/' + P.url AS url, longTitle, shortTitle, P.description
FROM Products P
INNER JOIN CONTAINSTABLE (Products, (longTitle, shortTitle), '"my text content"') AS FT ON P.id = FT.[key]
LEFT JOIN Product_Categories PC ON P.id = PC.productID
LEFT Join Categories C ON C.id = PC.categoryID
WHERE [primary] = 1
ORDER BY rank DESC
возвращает только строки с точной фразой «мой текстовый контент» - мне нужны строки, содержащие только «текст», но с более низким рангом. Если я изменю запрос следующим образом:
SELECT P.id, 'Product' AS Type, FT.rank, C.url + '/' + P.url AS url, longTitle, shortTitle, P.description
FROM Products P
INNER JOIN CONTAINSTABLE (Products, (longTitle, shortTitle), '"my" or "text" or "content"') AS FT ON P.id = FT.[key]
LEFT JOIN Product_Categories PC ON P.id = PC.productID
LEFT Join Categories C ON C.id = PC.categoryID
WHERE [primary] = 1
ORDER BY rank DESC
Я получаю больше строк, но строки со всеми тремя словами не имеют явно более высокого ранга, чем строки с одним словом.
Есть еще мысли?