Как отобразить соответствующую запись сначала с помощью FULLTEXT в SQL? - PullRequest
0 голосов
/ 27 февраля 2009

Я использую FULLTEXT в моем запросе sql для поиска записей.

        SELECT * FROM (SELECT d.DataId, (SELECT [Name] FROM Category WHERE CategoryId = d.CategoryId) AS 'Category', d.Description, d.CompanyName, d.City, d.CategoryId,
                d.CreatedOn, d.Rank, d.voteCount, d.commentCount, d.viewCount
        FROM Data d 
                INNER JOIN Keyword k
                    ON d.DataId = k.DataId
        WHERE FREETEXT(k.Keyword, @SearchQ) AND d.CategoryId=@CategoryId AND d.IsSearch=1 AND d.IsApproved=1

Когда я ищу rockstone hotel , в моей таблице есть запись с таким же именем, но сначала отображается какая-то другая запись, а затем отображается запись "rockstone hotel" в 3 позиции. Почему это происходит и как это улучшить ???

Я использую SQL Server 2005

Спасибо

Ответы [ 2 ]

1 голос
/ 27 февраля 2009

Цитируется из MSDN (Центр разработчиков SQL Server):

В отличие от поиска CONTAINS условие, где AND является ключевым словом, когда используется в freetext_string слово 'и' считается шумовым словом и будет отбрасываются.

http://msdn.microsoft.com/en-us/library/ms176078(SQL.90).aspx#

1 голос
/ 27 февраля 2009

У вас нет предложения Order By, которое освобождает базу данных для возврата записей в любом порядке. Обычно это порядок, в котором он встречает их при обработке предложения where, поэтому легко поверить, что существует «естественный» порядок, который использует база данных. Если вы хотите определенный заказ, вам нужно либо добавить предложение Order By, которое будет использовать какой-либо метод оценки, который вы создаете, либо вы должны заказать его в программе, которая получает записи.

(Я должен был бы предположить, что другие записи, которые вы извлекаете, также содержат критерии поиска, чуть дальше в текстовое поле.)

Смотрите здесь пример использования Rank для упорядочения ваших записей: Соответствие свободного текста SQL Server - как сортировать по релевантности Столбец Rank генерируется вызовом сопоставления текста.

...