FREETEXTTABLE всегда имеет ранг 0

Я использую SQLServer 2008, и если я выполняю следующий запрос:

SELECT 
  *
FROM
  FREETEXTTABLE(SomeTable, Name, 'a name that I know exists')

Я получаю ожидаемые строки, но ранг всегда равен 0.

В поисках решения этой проблемы я нашел этот вопрос на форуме Microsoft ASP.NET. , и, конечно же, если я добавлю:

ALTER FULLTEXT CATALOG MyCatalog REBUILD

Я начинаю получать ранг - но только временно.

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


person s1mm0t    schedule 22.06.2010    source источник


Ответы (2)


Ранг относится к другим результатам, возвращаемым в запросе, и поэтому полезен только для сортировки по релевантности из возвращаемых значений. Существует подробная информация о методе ранжирования.

person Schmalls    schedule 22.06.2010

У меня та же проблема, и принятый в настоящее время ответ не является решением для меня.

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

Для меня есть ошибка в рейтинге freetexttable. (Ошибка, которая не влияет на ранжирование containstable: я проверил это сам с помощью собственного каталога ошибок, и это также написано на это сообщение на форуме Microsoft.)

Из этот другой пост на форуме Microsoft кажется, эта ошибка возникает только в каталоге, в котором проиндексировано очень мало строк. Добавление данных в каталог приводит к исчезновению ошибки.

Итак, вот мой ответ, взятый из Павел Валента в еще одном сообщении на форуме Microsoft:

Если в вашем реальном каталоге не будет проиндексировано более нескольких сотен строк, добавьте в каталог какую-нибудь фиктивную таблицу, чтобы проиндексировать больше строк.

Это не загрязнит ваши результаты из-за того, как строятся запросы. Да, это кажется довольно странным решением. Но это единственное, что решило проблему для меня.

Последнее замечание: у меня была эта проблема с sql 2005 sp4, не тестировалась с 2008. (Вопрос для 2008.)

person Frédéric    schedule 24.09.2012
comment
По этой причине я отказался от таблицы freetexttable, и она соответствует совершенно не связанным полям. Например, он соответствовал 4245, когда поисковый запрос был свойством, и даже присваивал ему высокий рейтинг (наряду с 400 другими результатами, совершенно не связанными). Это очень плохо. - person MC9000; 08.10.2020