Результаты полнотекстового поиска не соответствуют ожидаемым - PullRequest
1 голос
/ 08 декабря 2010

Я использую Microsoft SQL Server 2008. Я не специалист по этому вопросу, но я создал полнотекстовый индекс и писал несколько запросов.

Он работает без ошибок и возвращает некоторые результаты., но строки, которые, как я знаю, должны совпадать, не всегда включаются.

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

Мой запрос довольно сложный, но вот он, если кто-то думает, что это проблема:

DECLARE @StartRow int;
DECLARE @MaxRows int;

SET @StartRow = 1;
SET @MaxRows = 10;

WITH ArtTemp AS
(SELECT TOP (@StartRow + @MaxRows) ROW_NUMBER() OVER (ORDER BY ArtViews DESC) AS RowID,
Article.ArtID,Article.ArtTitle,Article.ArtSlug,Category.CatID,Category.CatTitle,
Article.ArtDescription,Article.ArtCreated,Article.ArtUpdated,Article.ArtUserID,
[User].UsrDisplayName AS UserName
FROM Article
INNER JOIN Subcategory ON Article.ArtSubcategoryID = Subcategory.SubID
INNER JOIN Category ON Subcategory.SubCatID = Category.CatID
INNER JOIN [User] ON Article.ArtUserID = [User].UsrID
WHERE CONTAINS(Article.*,'FORMSOF(INFLECTIONAL,"HTML")'))

SELECT ArtID,ArtTitle,ArtSlug,CatID,CatTitle,ArtDescription,ArtCreated,
ArtUpdated,ArtUserID,UserName
FROM ArtTemp
WHERE RowID BETWEEN @StartRow + 1 AND (@StartRow + @MaxRows)
ORDER BY RowID

Взапрос выше, строки возвращаются.Однако, по крайней мере, одна строка, в которой я знаю, что она содержит слово «HTML», не включена.

Какие-либо советы по устранению неполадок?

Ответы [ 2 ]

1 голос
/ 08 декабря 2010

Я не эксперт по SQL, но «SELECT TOP (@StartRow + @MaxRows)» для меня переводится как выбор первых 11 строк (start = 1 max = 10), которые соответствуют критериям, независимо от их RowID,не выбирать из строк 1-10.Позже вы выбираете свои результаты «ГДЕ RowID МЕЖДУ @StartRow + 1 AND (@StartRow + @MaxRows)», что означает, что отображаются только строки с RowID между 2-11.Возможно, поэтому вы не получаете все ожидаемые результаты.Если это не так, я бы позаботился о том, чтобы ожидаемые вами строки отвечали всем критериям соединения.

1 голос
/ 08 декабря 2010

Не знаю, в этом ли проблема, но когда я впервые начал работать с индексами MySQL и Fulltext, у меня часто возникали проблемы с «стоп-словами» (http://dev.mysql.com/doc/refman/5.1/en/fulltext-stopwords.html) и минимальной длиной слова (http://www.devcha.com/2008/03/display-mysql-fulltext-search-settings.html).). Иногда полный текст поиск просто игнорировал бы определенные термины, потому что они были в списке стоп-слов, или они были короче минимальной длины слова.

Была также другая проблема, при которой стандартный полнотекстовый поиск не дал бы НИЧЕГО, если более 50% строк в моей таблице соответствовали критериям поиска. Переключение в режим булевого поиска решило проблему> 50%, но не проблему длины стоп-слова / мин.

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

Microsoft SQL Server может отличаться, но я надеюсь, что это немного поможет!

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