Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Всем доброе время суток

В запросе используется FTS

Вот таким макаром

 inner
   join FREETEXTTABLE(dbo.[tSomeTable], [Description], @Description) AS KEY_TBL
    ON i.[pk] = KEY_TBL.[key]

В целом в большенстве случаев работает нормально

Но иногда, когда в значение @Description пападает "странный текст", то запрос падает. Часто падала с ощибкой нехватки системных ресурсов (особенно на инстансах с Экспрессом), но крайний раз просто долго висел и не возвразал результат
Обычно фиксился таким макаром (в большенстве случаев)
 SET @Description = dbo.[RegexReplace](@Description, N'<(.|\n)*?>', N'');
- С# CLR, регулярное выражение, убирали среди этого хлама тэги
Карайний раз фиксился таким способом
set @Description = REPLACE(@Description, '-', ' - ');

Причём в крайнем случае до того как слово "zero-based" заменялось на "zero - based"
Были и другие слова через дефис. Валилось на нём.

@Description в целом содердит большой текст. Но не его размер влиял на ошибку.

В чём может быть прична?!
26 окт 11, 23:02    [11506060]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Где можно искать хотя бы?!
27 окт 11, 11:28    [11507447]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
LeadyGaaga
Member

Откуда:
Сообщений: 37
BOL:
Is text to search for in the column_name. Any text, including words, phrases or sentences, can be entered. Matches are generated if any term or the forms of any term is found in the full-text index.

Парсить вашу строку желательно предварительно разбив на слова, выкинуть разделители, выкинуть noise words. Другими словами предварительно нормализовать строку.
У вас может быть стоп-лист пустой и все слова трактуются как обычные, а не нойз ворды. В результате внутри происходит объединение больших множеств.
27 окт 11, 11:36    [11507512]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
LeadyGaaga,

от того что заменено '-' на ' - ' меньше слов не станет.
Иногда тексты и больше бывают для поиска. Но случаи когда выскакивают ошибки единичны и непредсакузуемы. Так что "от чего парсить" на 100% не ясно. Как и причина ошибки или зависания.

Когда смотришь - вполне обычный текст, принципиально ничем не примечательный.
27 окт 11, 15:39    [11510017]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
LeadyGaaga
Member

Откуда:
Сообщений: 37
Вообще слова с дефисами индексируются как 3 слова(для русского и англ языка это точно) .
Например aaa-bbb:
1)aaa
2)bbb
3)aaabbb

Если aaa или bbb - noise word, то оно будет пропущено.
А вот слово aaa-bbb-ccc: будут индексироваться только части.

Ну не может север оценить скорее всего объем оперативки необходмой для хранения промежуточных результатов. И это сделать действительно очень сложно для вашего непрсказуемого условия. При том, что if any term or the forms of any term is found .
27 окт 11, 16:09    [11510330]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Поступи проще :)

Вот бэкап с примером и скрипт.

К сообщению приложен файл (testFts.part01.rar - 140Kb) cкачать
28 окт 11, 00:20    [11513097]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Вторая часть

К сообщению приложен файл (testFts.part02.rar - 88Kb) cкачать
28 окт 11, 00:20    [11513099]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Если раскоментить

--set @Description = replace(@Description, '-', ' ');

работает

Тестил на

Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)   Jul  9 2008 14:43:34   Copyright (c) 1988-2008 Microsoft Corporation  Express Edition with Advanced Services on Windows NT 5.2 <X86> (Build 3790: Service Pack 2) 

Может это я что-то не шарю, но всё же.

К сообщению приложен файл (002_testCaseForFts.sql - 3Kb) cкачать
28 окт 11, 00:22    [11513106]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Буду рад если скажите хотя бы "где ещё спросить можно".
28 окт 11, 00:23    [11513107]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
ждлои
Guest
NIIIK,
м.б.
...The document length difference can affect ranking for all queries...
Troubleshooting Full-Text Search
Specifics on how to Search (and find) in SQL Server. This forum has the right expertise on how to do this in SQL Server, with deeper focus on SQL Server enhancements
28 окт 11, 01:23    [11513210]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Всё ещё в процессе :)

сам понимаю что "надо бы текст до нормального форматировать", но условия задачи ограничены

В идеале что бы он был
"слово-слово" "слово" "123"

но по факту там текст большой и непредсказуемый :)

Пример я взял заведомо не правильный просто сложно найти тест-кейс с "вроде бы с правильным значением", но такие случаи бывают. Просто сложно отловить.

Предлагаемый тест кейс так сильно вешает систему, что я НЕ РЕКОМЕДУЮ его запускать если нет ограничения на процессор/память у СКЛ сервера.

Рано или поздно (в зависимости от версии сервера и железа) будет получена ошибка
Msg 701, Level 17, State 123, Line 157
There is insufficient system memory in resource pool 'internal' to run this query.

Мой вопрос - в чём проблема и как это предотвратить (особенно случай с дефисом)

К сообщению приложен файл (testFts.part01.rar - 140Kb) cкачать
3 ноя 11, 02:01    [11543678]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Вторая часть

К сообщению приложен файл (testFts.part02.rar - 117Kb) cкачать
3 ноя 11, 02:02    [11543681]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
и сам скрипт, который падает.

К сообщению приложен файл (004_testCastWithError.sql - 4Kb) cкачать
3 ноя 11, 02:02    [11543684]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
LeadyGaaga
Member

Откуда:
Сообщений: 37
Если ваш искомый текст (html) где-нибудь хранится, то предагаю вам его хранить в бинарном виде в индесированном столбце. Т.е добавить столбец с типом документа .html и индескривать его как файл. Внурти все тэги и прочий мусор будет выброшен. Затем используя sys.dm_fts_index_keywords_by_document или постоянную таблицу заполненную на основе этой view получать keywords. Собирать их встроку и выполнять FREETEXTABLE.
3 ноя 11, 11:57    [11545119]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search Error  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
LeadyGaaga,

я бы тут больше выполнил набор таких фунций

set @Description = dbo.fnRegexReplace(@Description, N'<(.|\n)*?>', N'')
set @Description = dbo.fnRegexReplace(@Description, '\s+', ' ');
set @Description = dbo.fnRegexReplace(@Description, '(\w+-\w+)', '"$1"');

Вообще как только поймал текст с примером, который выдаёт ошибку, то поиск "что мешает" - только вопрос времени.
Но эту хрень ещё ловить надо.

С текстом в переменной @description ещё более или менее просто, а вот в искомом столбце текст не проапдейтить и вторую колоку нельзя (пока нельзя) создавать.

Тем более изначальный вопрос "как не дать СКЛ серверу уйти в крутое пике".

Понтяно что при изменеи текста всё что не нравилось FTSу всё будет работать. Вот только заранее и не знаешь "понравится или нет".
3 ноя 11, 21:28    [11549222]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить