Форум » Clipper » ADS FTS: кто-нить юзает ? странное время выборки... » Ответить

ADS FTS: кто-нить юзает ? странное время выборки...

p519446: Всем привет. Создал я, значит, FTS для таблицы клиентов (на clipper'e этого не сделать, пришлось через JDBC ваять). И вот вижу: для некоторых (немногих) клиентов время выборки какое-то нереальное. Первую запись типа "ПАВЕЛ ВЕРЕС" находит быстро, но дальше - капец, ждать надо минуту-две, а то и три. Строки ввожу достаточной длины и в них нет "шумовых" слов. В таблице более 500 тыс строк. Где-то можно почитать про эти особенности FTS'a ? (доку читал, там нет объяснений этому эффекту) PS. Большинство же записей ищется очень быстро, менее 5 сек

Ответов - 6

p519446: Поигрался еще с ним. Есть подозрение, что ему "тошно" от строк поиска, в которых одно из искомых слов встречается в таблице реже редкого (1-2 раза). Например, если в таблице записано наименование покупателя: "ДЖАБЕР НАИФ ОГЛЫ" и поиск идёт по вхождению каждого из слов: *НАИФ* and *ДЖАБ" (или так: *ДЖАБ* and *НАИФ" - неважно), то FTS будет молотить... 86 сек. Ужоснах... :-/

Dima: SX_WILDSEEK поюзай ;)

p519446: Дык юзал, когда у мну не было ADS'a. Но допустим, я буду открывать на чтение эту таблицу в другом алиасе. Он же (sx_wild) будет через клиента прогонять все строки индекса, так ?


Dima: Пробовать надо

p519446: у мну есть еще один вариант: создать на АДС-сервере таблицу со структурой типа {source_name c 50, word c 30, key c 8}, в которую вгонять наименования клиентов таким вот способом: source_name | word | key --------------------------------------------------------------- ИВАНОВ АБРАМ МОИСЕЕВИЧ | ИВАНОВ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | ВАНОВ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | АНОВ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | НОВ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | ОВ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | АБРАМ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | БРАМ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | РАМ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | АМ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | МОИСЕЕВИЧ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | ОИСЕЕВИЧ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | ИСЕЕВИЧ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | СЕЕВИЧ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | ЕЕВИЧ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | ЕВИЧ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | ВИЧ | 01364187 ИВАНОВ АБРАМ МОИСЕЕВИЧ | ИЧ | 01364187 Дальше проиндексировать по word и при вводе строки поиска, состоящей из нескольких слов, оценивать для каждого слова значение ax_getaofrecordcount(). Затем делать aof-фильтр с optlevel=1 по тому слову, у которого наименьшее кол-во строк, а остальные слова из фразы поиска цеплять уже по условию вхождения в name (т.е. по "$"). Буду пробовать, отпишусь тогда.

p519446: p519446 пишет: у мну есть еще один вариант в общем, сравнил я эти варианты. И вот что спешу доложить: скорость "колхозного" варианта, когда все возможные начала строк пишутся в отдельные записи (как с "Ивановым Абрамом Моисеевичем") - просто космическая по сравнению с ADS FTS :-) Превышение от 1.5 до 50(!) раз. Так что буду юзать свою схему. Хоть и выглядит ужасающе, но работает же! :-)



полная версия страницы