FLUIdS
Что нового
После более чем полугодового перерыва возобновилась работа над
совершенствованием поисковой системы, результатом которой стал выпуск
альфа-версии 4.0. По сравнению с 3.x в систему внесен целый ряд
архитектурных изменений:
- Формат индексного файла наконец-то стал платформо-независимым
(по крайней мере, я на это сильно надеюсь :).
- Создана эмуляция поиска с учетом регистра ключевых слов. Поисковая
система теперь разпознает 4 разновидности слов:
- все буквы в слове - строчные (например, weekend, 11th);
- все буквы в слове - прописные (например, ММВБ, МОДУЛЬ0);
- первая буква в слове - прописная, остальные - строчные (например,
Apache, Иванов, Н0ль);
- все остальное (например, 3DStudio, FLUIdS). В этом
последнем случае не делается различия между словами, отличающимися
написанием строчных и прописных букв (например, слова FLUIdS и
FLUiDS считаются эквивалентными).
- Усовершенствован формат индексного файла. В результате скорость поиска
возрасла от полутора до нескольких раз.
- В ключевых словах поиска можно применять метасимволы * и
? (в любом месте ключевого слова. И даже в начале, если при
компиляции в файле ./src/cfg.h определен параметр SUBWORD_SEARCH). Ранее
разрешен был только метасимвол *, и только на конце
ключевых слов.
- Возможно применение нескольких своп-файлов при индексации, возрасла и
скорость своппинга. В результате время индексации для больших объемов
информации существенно сократилось.
- Размер индексного файла в этой версии минимален. Дальнейшее развитие
поисковой системы будет приводить только к его росту.
- Исходные тексты библиотек и исполняемых модулей переписаны таким образом,
чтобы было возможным их использование в многопоточной среде.
- Добавлен Makefile для компиляции в MSVC++ 5.0.
К сожалению, из-за недостатка свободного времени у разработчика в 4.0
реализовано не все, что планировалось, поэтому первые три подверсии
(4.0-4.2) будут отведены под следующие цели:
- Поддержка украинского и белорусского языков (4.0.1).
- Создание fluids.dll или fluids.so с описанием API для поиска (4.0.2).
- Поиск с учетом времени последней модификации проиндексированных
документов (4.1.x, потребует изменения формата индексного файла).
- Совершенствование механизма индексации (4.2.x). Сейчас этот
механизм полностью заимствован из 3.x.
Версия 4.0a8 в исходных текстах доступна с Web сервера SbNet по адресу
http://www.sbnet.ru/soft/fluids/dist/
В ней пока отсутствует документация и исполняемые модули. Альфа версии
присущи и другие недостатки, но на то она и alpha :).
Выпуск betta версии планируется на конец февраля. В связи с допущеной мной
идеологической ошибкой формат индексного файла в ней будет изменен
(и его размер для того же объема индексируемой информации должен возрасти...)
Это заключительная версия серии 3.x, главным образом фиксирующая обнаруженные
ошибки в программном коде. Помимо этих исправлений в конфигурационный файл
CGI модуля в раздел [main] введена дополнительная директива
BodyTagAddition для задания дополнительных аттрибутов в теге
<BODY> генерируемых страниц.
В этой версии:
В этой версии продолжено совершенствование профильных файлов, в результате:
- введены переменные, которые могут
быть использованы в любом профильном файле;
- добавлены новые переменные профильных файлов:
Имя переменной
| Значение переменной
| Профильный файл
|
$WHAT_ACTION
| означает вид генерируемой в данный момент страницы: бланка запроса или
результатов поиска;
| любой
|
$USED_INDEXES
| список используемых индексов в виде
ind=id1&ind=id2&...ind=idN, т.е. пригодном для
организации ссылок
| любой
|
$STRUCTURE
| область применимости запроса
| любой
|
$QUERY_TYPE
| вид запроса
| любой
|
$RESULT_PAGE_HEADER
| заголовок страницы с результатами поиска
| стартовый и завершающий
|
$SHORT_LAST_MODIFIED
| дата внесения последних изменений в найденный документ в укороченном
формате
| результативный
|
$SCORE
| соответствие найденного документа запросу, выраженное в процентах
(с долями процента)
| результативный
|
$SCORE_PROCENT
| соответствие найденного документа запросу, выраженное в процентах
(без долей процента)
| результативный
|
- подключаемые файлы CGI модуля TopContentFile,
BottomContentFile, FormHeaderFile, FormFooterFile,
SearchHeaderFile и SearchFooterFile получают статус профильных;
- Внимание! Если Вы используете эти
файлы, то необходимо:
- перенести их определения в конфигурационном файле CGI модуля
из блока main в блок templates;
- встречающиеся в них символы '$' и
'\' (символы доллара и обратного слэша) заэкранировать
(т.е. предварить дополнительным символом '\');
- ограничить их размер 4-мя килобайтами.
- созданы примеры использования всего набора профильных файлов для
представления бланка запроса и результатов поиска в стиле поисковых систем
Aport и
Следопыт
и в свободном стиле #1.
Помимо этого:
- появилась возможность для исполняемых в режиме командной строки модулей
FLUIdS выдавать сообщения в желаемой кодировке (ее можно указать с помощью
опции -p);
- для версий под OS/2 и Windows 95/NT кодировка выдаваемых сообщений
для исполняемых в режиме командной строки модулей FLUIdS установлена в
ibm866 вне зависимости от рабочей кодировки;
- для версии под OS/2 исправлена эмуляция opendir()/readdir()/closedir();
- для случая, когда CGI модуль настроен на самостоятельную перекодировку,
вывод русских букв в ссылках осуществляется в escape-виде (т.е. через %xx).
В этой версии:
- введена поддержка профильного файла
бланка запроса CGI модуля - с этого момента любой элемент сгенерированных
CGI модулем страниц может быть задан самостоятельно;
- добавлены параметрические переменные
$env и $color для всех видов профильных файлов;
- к переменным результативного профильного файла добавилась
переменная URL_TEXT для
правильного вывода адреса найденной ссылки в текстовом виде (в простом
$URL могут встречаться символы амперсанд, пробел и т.д. - они
нуждаются в специализированном экранировании при выводе в гипертекстовой
среде);
- при обращении к CGI модулю с запросом на поиск, если строка запроса
пуста или вообще отсутствует в аргументах вызова, то вне зависимости от
значения аргумента w генерируется страница с бланком запроса.
Для CGI модуля введен ряд усовершенствований, позволяющих более тонко
настроить его выход под нужды администраторов системы:
Помимо этого:
- поисковая система спортирована под OS/2;
- проверена правильность выдаваемых англоязычных сообщений;
- к определенному в HTTP запросе имени конфигурационного файла теперь
добавляется постфикс ".cfg", т.е. при обращении к CGI модулю вида
fluids.cgi?cfg=myconf&... имя myconf будет преобразовано в
myconf.cfg;
- исправлены найденные ошибки.
В этой версии:
- В конфигурационный файл CGI модуля добавлен блок user-agent. В
качестве директив в нем выступают названия кодировок, в качестве их
значений - шаблоны, которые будут
сравниваться с идентификационной строкой,
посылаемой браузером пользователя в HTTP запросе. С помощью директив этого
конфигурационного блока CGI модуль сможет определить кодировку клиента, если
она не указана в параметрах вызова fluids.cgi (через параметр cs) или
не определяется из устанавливаемой Web сервером
Russian Apache
переменной окружения CHARSET (это имя задается параметром компиляции
HTTPD_CHARSET_ENVIRONMENT).
- JavaScript код, генерируемый CGI модулем для браузера Netscape Navigator,
теперь выдается перед теми тегами HTML, в которых он используется.
Почти все внесенные изменения в этой версии касаются CGI модуля:
- Оказалось, что ключевые слова в пользовательских запросах не переводились
в нижний регистр. В результате получалось, что ключевому слову, в котором
находилась хотя бы одна заглавная буква, не отвечало ни одного
проиндексированного документа. Эта ошибка присутствует во всех предыдущих
версиях серии 3.x, поэтому всем владельцам поисковой системы FLUIdS
настоятельно рекомендуется обновить ее до текущей версии 3.10.3.
- В конфигурационный файл CGI модуля в блок index, описывающий
используемый индекс, добавлены директивы allow и disallow для
определения имен станций Интернет или их IP адресов, с которых разрешен или
наоборот, запрещен, доступ к данному индексу. По умолчанию, когда ни одна из
этих директив не используется, индекс считается общедоступным.
- Бланк запроса, генерируемый CGI модулем, сделан более адекватным
возможностям поисковой системы системы.
- Код JavaScript вынесен из "головы" генерируемых страниц в "тело" - теперь
в случае возникновения какой-либо нештатной ситуации (например, отсутствия
индексов для поиска) браузер не будет жаловаться, что какие-то объекты или
методы JavaScript ему не доступны.
- Исправлены найденные ошибки.
Как показала практика, специальное обслуживание стоп-слов в локальных
индексах и отбрасывание коротких слов при индексации не имеют под собой
реальной почвы (размер индексного файла сокращается незначительно, менее
чем на 10%, а неудобства создаются большие - никогда не знаешь заранее,
отброшено данное ключевое слово при индексации или же просто отсутствует в
индексируемых текстах). Поэтому было решено назначить начальные установки
в исходных текстах FLUIdS таким образом, чтобы индексировались ВСЕ слова,
и, соотвественно, чтобы был возможен поиск по ЛЮБЫМ разумным ключевым словам.
В соответствии с новой стратегией начальные установки были переопределены
следующим образом:
Помимо этого, если в запросе в качестве ключевого слова встретилось
стоп-слово, то теперь оно игнорируется. Причина такому решению - нулевой
результат поиска, если стоп-слово связывалось с остальными ключевыми словами
операцией AND.
Дополнительно в конфигурационный файл индексации введены две новые директивы:
MinWordLength и
MaxWordLength, являющиеся
аналогами параметров компиляции
MIN_WORD_LENGTH и
MAX_WORD_LENGTH.
Другие внесенные изменения:
- Добавлена новая утилита smpgrep, позволяющая осуществлять
простой поиск последовательности символов в строках текстовых файлов.
- К принятому по умолчанию списку
ValidWords добавлено слово vm.
- Поправлена автоконфигурация для функции qsort.
- Исправлены найденные ошибки.
В конфигурационный файл индексации добавлены три новые директивы:
- MaxMemoryVolum -
задает ограничение на размер индекса слов, хранимый программой flindex
в оперативной памяти. Ранее эта величина определялась только параметром
компиляции
MAX_MEMORY_VOLUM.
От значения этой величины сильно зависит производительность процесса
индексации, и для оптимального времени индексации больших объемов информации
ее приходится подбирать (обычный диапазон приемлемых значений - от 1/5 до
1/2 от общего объема оперативной памяти, установленной в компьютере и
измеряемой в байтах). Ранее при изменении этой величины необходимо было
перекомпилировать исходные тексты FLUIdS, теперь же с директивой
MaxMemoryVolum необходимость в этом отпала.
- TempDir - задает имя
директории для хранения временных файлов. В предыдущих версиях эта директория
была жестко задана в библиотеках C (для UNIX систем это обычно /tmp,
для MS Windows - текущая директория). Вполне реальна ситуация, когда
раздел диска, в котором находится эта директория, переполняется (тогда
выдается сообщение вида "File system is full"). Ранее поделать с этим ничего
было нельзя. Теперь же с помощью директивы TempDir можно
переопределить директорию для временных файлов так, чтобы она указывала на
раздел диска с достаточным объемом свободного дискового пространства.
- RejectWords -
определяет набор шаблонов для
неиндексируемых слов. Эта директива служит некоторой альтернативой для
правил отбора индексируемых слов,
задаваемых в момент компиляции системы соответствующими параметрами
компиляции. Директива RejectWords - достаточно мощное
средство фильтрации индексируемых слов.
Помимо этого, директивы
IgnoreFilesLimit и
IgnorePercentLimit
перенесены из конфигурационного блока main в блок words.
В этой версии значительно расширен список стоп-слов, принятый по умолчанию.
Теперь он имеет следующий вид:
- Английские слова:
- a, all, an, and, are, can,
could, did, do, for, from,
had, have, it, may, not, of,
that, the, this, was, will, with,
you, your;
- Русские слова:
- в, на, не, но, при, по.
Обновился и список ValidWords:
- Английские слова:
- 95, 98, ar, bg, c, cc,
cd, cp, dd, ed, h1, h2, h3,
h4, h5, h6, fg, id, im, ip,
ln, ls, mc, mv, nc, ng, nt,
od, os, pr, re, rm, sh, tr,
vi, wc;
- Русские слова:
- ад, ом, си, уж, ус, юг,
яд, яndex.
Внесены следующие исправления:
- По окончании процесса индексации в индексном файле теперь
сохраняются только те заданные директивой CommonWords стоп-слова,
которые реально встретились в текстах индексируемых файлов (ранее
сохранялся весь список).
- Для кодировки koi8-r, в которой
русские буквы расположены в таблице символов не в алфавитном порядке,
исправлено сравнение скобочных метасимволов вида [б-г] в шаблонах с русскими
буквами.
- По недоразумению присутствовало ограничение на число генераций имен
временных файлов (могло быть сгенерировано только 1000 имен). Подобное
ограничение могло привести к тому, что прилагаемая к FLUIdS утилита при
обработке файлового дерева на тысячном файле прекратила бы свое выполнение
с ошибкой "cann't generate name for the temporary file". Сейчас подобное
ограничение снято.
В этой версии очередной (и, наверное, последний в серии 3.x) раз поменялся
формат индексного файла. Это сделано по нескольким соображениям, но главное
из них - это возможность совместного использования индексных файлов,
созданных на одной платформе, но в разных операционных средах (в частности,
в UNIX и MS Windows для платформы Intel). Оказалось, что кроме различных
кодировок создаваемых индексов, существовало разночтение заголовка индексных
файлов. В новой версии, таким образом, вводится 'полууниверсальный' формат
индексных файлов (это шаг в сторону версии 4.0) плюс возможность поиска
по индексам, находящимся в разных кодировках. Однако объединение двух
разнокодировочных индексов (это делает программа flmerge) пока не
возможно.
В новой версии необходимо корректно определить рабочую кодировку FLUIdS,
задаваемую параметром компиляции
FLUIDS_LOCAL_CHARSET,
а также соответствующий его значению
APPLY_CYR_*
(файл ./src/cfgrus.h). Если же последний не задан, то исполняемые
модули FLUIdS выдадут ошибку: "Неизвестная кодировка xxx", где
xxx - значение вышеупомянутого параметра компиляции
FLUIDS_LOCAL_CHARSET. Все это не важно, если отключена поддержка
русского языка.
Помимо этого в версии 3.10 переименованы некоторые параметры вызова (или их
значения) CGI модуля (с целью уменьшения числа символов в их именах):
Старое имя/значение
| Новое имя/значение
|
what
| w
|
form
| frm
|
search
| sch
|
conf
| cfg
|
qform
| qf
|
eform
| ef
|
iform
| if
|
terse
| trs
|
charset
| cs
|
query
| q
|
В числе других изменений:
- Обновлены библиотеки libz и libcgi. Теперь любое имя функции, глобальной
переменной или структуры в библиотеке libz начинается с символа 'z', а в
libcgi - с символов 'cgi' или 's'. Также в эти библиотеки перенесены некоторые
функции из непосредственного кода FLUIdS.
- В libz добавлены функции определения отрезков времени (с точностью до
миллисекунд). Теперь поисковые модули сообщают затраченное на поиск время
(обычно это доли секунды).
- Программа flsearch сообщает дополнительно кодировку индексного файла и
число найденных в нем результатов поиска.
- Убран за ненадобностью параметр компиляции SMALL_INDEX.
- К принятому по умолчанию списку ValidWords добавлены слова "ад", "ом",
"си", "уж", "ус", "юг" и "яд" (если включена поддержка русского языка).
- Чтобы скомпилировать все прилагаемые к FLUIdS утилиты, теперь необходимо
выполнить команду 'make utils'. Ранее отвечавшая за это команда
'make convertors' создает только программы-перекодировщики
(xxx2yyy).
- Устранены найденные ошибки.
Главное отличие этой версии от предыдущей - возможность
компиляции и эксплуатации системы FLUIdS в
среде MS Windows 95/NT. Для этого в дистрибутивную поставку FLUIdS добавлен
соответствующий make-файл, разработанный для компилятора Borland C 5.02
(сейчас рассматривается возможность адаптации make-файла под Visual C++ 5.0),
и внесены дополнительные изменения в исходный код системы, а именно:
- Учтены особенности файловых систем, используемых в MS Windows
(VFAT или NTFS):
- символом-разделителем имен поддиректорий служит обратный
слэш, а не прямой;
- имена файлов не зависят от регистра составляющих их букв;
- полное имя файла может быть записано в виде c:file.ext,
без разделяющего драйв и имя файла слэша.
- Если для CGI модуля не определена переменная окружения
SCRIPT_FILENAME, то она определяется из аргументов вызова
fluids.exe.
Для желающих использовать FLUIdS в среде MS Windows 95/NT специально создан
отдельный дистрибутив
fluids-cur.zip
(упакован с помощью pkzip), в котором все файлы находятся в кодировке
windows-1251, а начальные установки определяют
рабочую кодировку FLUIdS как "win".
Помимо этого, в FLUIdS введена новая утилита repl, помогающая при
процедуре перекодировки исходных текстов,
в результате чего эта процедура значительно упростилась.
Из других изменений можно отметить следующие:
- К принятому по умолчанию списку
ValidWords добавлено
слово cd;
- Немного подправлена автоконфигурация (теперь проверяются на
существование и корректность функции memcmp и bcmp, а также тестируется
файловая система на предмет регистро-зависимых имен файлов);
- При процедуре перекодировки исходных
текстов перекодируются также документация и примеры.
Новое в этой версии:
- Появилась возможность автоматической
перекодировки исходных текстов FLUIdS,
если используемая в системе кодировка отличается от начальной кодировки
текстов FLUIdS koi8-r.
- Теперь можно индексировать документы, находящиеся в
различных кодировках.
- Исправлена неприятная ошибка в CGI модуле, связанная с тем, что для
результатов поиска заранее выделялась память исходя из значения параметра
start. Поэтому злонамеренный пользователь мог повысить загрузку
Web сервера, посылая ему запросы вида
fluids.cgi?q=a*&start=10000000, если на стороне Web
сервера не стояло ограничения на выделяемый объем памяти для CGI модулей.
- Подкорректирован verbose output программы
flindex.