DataparkSearch поддерживает почти все популярные в современном Internet однобайтные и многобайтные кодировки, включая корейский euc-kr, китайские Big5, gbk и gb2312, японские shift-jis, euc-jp и iso-2022-jp, а так же Unicode UTF-8. Это позволяет индексировать документы на более чем 650-ти языках мира, предусмотренных в Unicode.
Внимание! Из-за большого объема перекодировочных таблиц, приводящего к увеличению размера исполняемых файлов, поддержка многобайтных кодировок не компилируется по-умолчанию. Смотрите параметры configure, как активизировать поддержку этих кодировок при компиляции.
Таблица 7-1. Кодировки и их языковые группы
>Группа | Кодировки |
Arabic | cp864, ISO-8859-6, MacArabic, windows-1256 |
Armenian | armscii-8 |
Baltic | cp775, ISO-8859-13, ISO-8859-4, windows-1257 |
Celtic | ISO-8859-14 |
Central European | cp852, ISO-8859-16, ISO-8859-2, MacCE, MacCroatian, MacRomania, windows-1250 |
Chinese Simplified | GB2312, GBK |
Chinese Traditional | Big5, Big5-HKSCS, cp950, GB-18030 |
Cyrillic | cp855, cp866, cp866u, ISO-8859-5, KOI-7, KOI8-R, KOI8-U, MacCyrillic, windows-1251 |
Georgian | geostd8 |
Greek | cp869, cp875, ISO-8859-7, MacGreek, windows-1253 |
Hebrew | cp862, ISO-8859-8, MacHebrew, windows-1255 |
Icelandic | cp861, MacIceland |
Indian | MacGujarati, tscii |
Iranian | ISIRI3342 |
Japanese | EUC-JP, ISO-2022-JP, Shift_JIS |
Korean | EUC-KR |
Lao | cp1133 |
Nordic | cp865, ISO-8859-10 |
South Eur | ISO-8859-3 |
Tajik | KOI8-T |
Thai | cp874, ISO-8859-11, MacThai |
Turkish | cp1026, cp857, ISO-8859-9, MacTurkish, windows-1254 |
Unicode | sys-int, UTF-16BE, UTF-16LE, UTF-8 |
Vietnamese | VISCII, windows-1258 |
Western | cp437, cp500, cp850, cp860, cp863, IBM037, ISO-8859-1, ISO-8859-15, MacRoman, US-ASCII, windows-1252 |
Каждая кодировка имеет модет иметь несколько различных вариантов названия. Например, iso-8859-2, iso8859-2, latin2 - названия одной и той же кодировки. DataparkSearch понимает следующие варианты названий кодировок:
Таблица 7-2. Синонимы наименований кодировок
armscii-8 | armscii-8, armscii8 |
Big5 | big-5, big-five, big5, bigfive, cn-big5, csbig5 |
Big5-HKSCS | big5-hkscs, big5_hkscs, big5hk, hkscs |
cp1026 | 1026, cp-1026, cp1026, ibm1026 |
cp1133 | 1133, cp-1133, cp1133, ibm1133 |
cp437 | 437, cp437, ibm437 |
cp500 | 500, cp500, ibm500 |
cp775 | 775, cp775, ibm775 |
cp850 | 850, cp850, cspc850multilingual, ibm850 |
cp852 | 852, cp852, ibm852 |
cp855 | 855, cp855, ibm855 |
cp857 | 857, cp857, ibm857 |
cp860 | 860, cp860, ibm860 |
cp861 | 861, cp861, ibm861 |
cp862 | 862, cp862, ibm862 |
cp863 | 863, cp863, ibm863 |
cp864 | 864, cp864, ibm864 |
cp865 | 865, cp865, ibm865 |
cp866 | 866, cp866, csibm866, ibm866 |
cp866u | 866u, cp866u |
cp869 | 869, cp869, csibm869, ibm869 |
cp874 | 874, cp874, cs874, ibm874, windows-874 |
cp875 | 875, cp875, ibm875, windows-875 |
cp950 | 950, cp950, windows-950 |
EUC-JP | cseucjp, euc-jp, euc_jp, eucjp, ujis, x-euc-jp |
EUC-KR | cseuckr, euc-kr, euc_kr, euckr |
GB-18030 | gb-18030, gb18030 |
GB2312 | chinese, cn-gb, csgb2312, csiso58gb231280, euc-cn, euc_cn, euccn, gb2312, gb_2312-80, iso-ir-58 |
GBK | cp936, gbk, windows-936 |
geostd8 | geo8-gov, geostd8 |
IBM037 | 037, cp037, csibm037, ibm037 |
ISIRI3342 | isiri-3342, isiri3342 |
ISO-2022-JP | csiso2022jp, iso-2022-jp |
ISO-8859-1 | cp819, csisolatin1, ibm819, iso-8859-1, iso-ir-100, iso8859-1, iso_8859-1, iso_8859-1:1987, l1, latin1 |
ISO-8859-10 | csisolatin6, iso-8859-10, iso-ir-157, iso8859-10, iso_8859-10, iso_8859-10:1992, l6, latin6 |
ISO-8859-11 | iso-8859-11, iso8859-11, iso_8859-11, iso_8859-11:1992, tactis, thai, tis-620, tis620 |
ISO-8859-13 | iso-8859-13, iso-ir-179, iso8859-13, iso_8859-13, l7, latin7 |
ISO-8859-14 | iso-8859-14, iso-ir-199, iso8859-14, iso_8859-14, iso_8859-14:1998, l8, latin8 |
ISO-8859-15 | iso-8859-15, iso-ir-203, iso8859-15, iso_8859-15, iso_8859-15:1998, l9, latin0, latin9 |
ISO-8859-16 | iso-8859-16, iso-ir-226, iso8859-16, iso_8859-16, iso_8859-16:2000 |
ISO-8859-2 | csisolatin2, iso-8859-2, iso-ir-101, iso8859-2, iso_8859-2, iso_8859-2:1987, l2, latin2 |
ISO-8859-3 | csisolatin3, iso-8859-3, iso-ir-109, iso8859-3, iso_8859-3, iso_8859-3:1988, l3, latin3 |
ISO-8859-4 | csisolatin4, iso-8859-4, iso-ir-110, iso8859-4, iso_8859-4, iso_8859-4:1988, l4, latin4 |
ISO-8859-5 | csisolatincyrillic, cyrillic, iso-8859-5, iso-ir-144, iso8859-5, iso_8859-5, iso_8859-5:1988 |
ISO-8859-6 | arabic, asmo-708, csisolatinarabic, ecma-114, iso-8859-6, iso-ir-127, iso8859-6, iso_8859-6, iso_8859-6:1987 |
ISO-8859-7 | csisolatingreek, ecma-118, elot_928, greek, greek8, iso-8859-7, iso-ir-126, iso8859-7, iso_8859-7, iso_8859-7:1987 |
ISO-8859-8 | csisolatinhebrew, hebrew, iso-8859-8, iso-ir-138, iso8859-8, iso_8859-8, iso_8859-8:1988 |
ISO-8859-9 | csisolatin5, iso-8859-9, iso-ir-148, iso8859-9, iso_8859-9, iso_8859-9:1989, l5, latin5 |
KOI-7 | iso-ir-37, koi-7, koi7 |
KOI8-R | cskoi8r, koi8-r, koi8r |
KOI8-T | koi8-t, koi8t |
KOI8-U | koi8-u, koi8u |
MacArabic | macarabic |
MacCE | cmac, macce, maccentraleurope, x-mac-ce |
MacCroatian | maccroation |
MacCyrillic | maccyrillic, x-mac-cyrillic |
MacGreek | macgreek |
MacGujarati | macgujarati |
MacHebrew | machebrew |
MacIceland | macisland |
MacRoman | csmacintosh, mac, macintosh, macroman |
MacRomania | macromania |
MacThai | macthai |
MacTurkish | macturkish |
Shift_JIS | csshiftjis, ms_kanji, s-jis, shift-jis, shift_jis, sjis, x-sjis |
sys-int | sys-int |
tscii | tscii |
US-ASCII | ansi_x3.4-1968, ascii, cp367, csascii, ibm367, iso-ir-6, iso646-us, iso_646.irv:1991, us, us-ascii |
UTF-16BE | utf-16, utf-16be, utf16, utf16be |
UTF-16LE | utf-16le, utf16le |
UTF-8 | utf-8, utf8 |
VISCII | csviscii, viscii, viscii1.1-1 |
windows-1250 | cp-1250, cp1250, ms-ee, windows-1250 |
windows-1251 | cp-1251, cp1251, ms-cyr, ms-cyrl, win-1251, win1251, windows-1251 |
windows-1252 | cp-1252, cp1252, ms-ansi, windows-1252 |
windows-1253 | cp-1253, cp1253, ms-greek, windows-1253 |
windows-1254 | cp-1254, cp1254, ms-turk, windows-1254 |
windows-1255 | cp-1255, cp1255, ms-hebr, windows-1255 |
windows-1256 | cp-1256, cp1256, ms-arab, windows-1256 |
windows-1257 | cp-1257, cp1257, winbaltrim, windows-1257 |
windows-1258 | cp-1258, cp1258, windows-1258 |
indexer перекодирует все документы в кодировку, указанную в команде LocalCharset в файле indexer.conf. Внутри программы перекодировка реализована посредством промежуточного представления в виде Unicode. Особенность DataparkSearch состоит в том, что перекодировка между несовместимыми кодировками (например, между русской и греческой) не приводит к потере данных. В случае, если перекодировка какого-либо символа невозможна, DataparkSearch представит этот символ в базе данных в HTML-формате в виде &#NNN; где NNN - код символа, закрепленного за ним в Unicode. Таким образом, вне зависимости от выбора LocalCharset, DataparkSearch сохранит полную информацию о документе без каких-либо потерь. Однако, выбор LocalCharset влияет на размер базы данных.
Выбор LocalCharset должен производиться с учетом языкового наполнения индексируемого пространства. Правильный выбор позволит уменьшить место, требуемое для хранения, а так же увеличить скорость индексации и поиска.
Если командой LocalCharset указана кодировка UTF-8, то это позволит сохранять любые символы, поддерживаемым в Unicode без необходимости представлять их в HTML-формате. Однако, следует иметь в виду, что это заведомо приводит к использованию до двух-трех байт на каждую не-латинскую букву. Например, на каждую букву кириллицы требуется два байта для сохранения ее в UTF-8.
Поскольку все кодировки включают в себя латинские буквы, то любая кодировка предоставляет поддержку по-крайней мере двух языков - английского и еще какого-то одного (или более) языка (единственное исключение - US-ASCII, поддерживающий только латинские буквы). Это означает, что при использовании DataparkSearch с LocalCharset, отличным от UTF-8, одновременная индексация документов с языками из одной группы не приводит к необходимости использовать HTML-формат, а значит не приводит к увеличению необходимого дискового пространства.
Например, если Ваша поисковая машина настроена использовать LocalCharset из 5-й группы (Кирилица), то документы на болгарском, белорусском, македонском, русском, сербском, украинском, а так же на английском языках будут сохранены компактно, с использованием одного байта на одну букву. Индексирование документов в других кодировках не из 5-й группы (включая UTF-8) также возможно; однако indexer будет использовать HTML-формат для сохранения букв, отличных от кирилических и английских. Сохранение, например, греческой буквы в кириллической кодировке требует применение семь байт на одну букву.
Таким образом, следует придерживаться следующего алгоритма при выборе LocalCharset: если Вы индексируете, например, в-основном кириллические и анлгийские документы, то выгоднее изпользовать LocalCharset из 5й группы. Если же Ваши документы сожержат информацию на языках из многих языковыз групп одновременно, то в качестве LocalCharset выгоднее использовать UTF8.
indexer определяет кодировку в документа в следующем порядке:
"Content-type: text/html; charset=xxx"
<META NAME="Content-Type" CONTENT="text/html; charset=xxx">
Выбор этого варианта можно выключить указав команду GuesserUseMeta no в файле конфигурации indexer.conf.
При выключенном автораспозновании: кодировка по-умолчанию, указанная командой "Charset"
При включенном автораспознавании: результат работы автоматического распознавания кодировки.
DataparkSearch имеет механизм автоматического распознавания кодировки и языка документа. В настоящее время распознается около 100 различных комбинаций кодировки и языка. Распознавание реализовано с использованием так называемой "N-Gram-Based Text Categorization" технологии. В комплекте программы поставляются файлы с так называемыми "картами языков", один файл на каждую пару кодировка-язык. По-умолчанию они устанавливаются в /usr/local/dpsearch/etc/langmap/. Чтобы увидеть полный список распознаваемых в настоящий момент языков и кодировок, взгляните в этот каталог. Распознавание работает хорошо на текстах в 500 байт и длиннее. Более короткие тексты могут распознаваться хуже. Для активизации автоматического распознавания кодировки необходимо загрузить языковые карты, используя команды LangMap.
Загружает из указанного файла карту языка и кодировки для автоматического их определения. Вы можете задать как абсолютный, так и относительный путь. Относительный путь задаётся от директории etc. Можно использовать несколько команд LangMapFile.
LangMapFile langmap/en.ascii.lm
Для создания собственных карт языков служит утилита dpguesser. Кроме этой утилиты вам также потребуется файл-образец текстов на данном языке в нужной кодировке. Для создания своей карты языка используйте следующий формат команды:
dpguesser -p -c charset -l language < FILENAME > language.charset.lm
Утилиту dpguesser можно также использовать для определения языка и кодировки файла на основании уже созданных карт языков. Для этого используйте следующий формат команды:
dpguesser [-n maxhits] < FILENAME
Для некоторых языков существует несколько используемых кодировок. Для преобразования текстов из одной, поддерживаемой DataparkSearch кодировки, в другую предназначена утилита dpconv.
dpconv [OPTIONS] -f charset_from -t charset_to [configfile] < infile > outfile
По умолчанию, утилиты dpguesser и dpconv устанавливаются в директорию /usr/local/dpsearch/sbin/.
Поддерживается автоматическое обновление карт языков и кодировок, если удалённый сервер возвращает чётко указаные язык и кодировку. Для включения этой возможности необходимо в файле indexer.conf указать команду
LangMapUpdate yes
По умолчанию, DataparkSearch использует только первые 8192 байт каждого индексируемого файла для определения языка и кодировки. Вы можете изменить это значение при помощи команды GuesserBytes. Используйте значение 0 для учёта всего такста индексируемого документа.
GuesserBytes 16384
Используйте команду RemoteCharset в indexer.conf чтобы установить кодировку документов по-умолчанию.
Если индексируемый сервер не выдает кодировку документа ни в заголовке Content-Type, ни в META-тэге, и при этом автоматическое распознаывание либо отключено, либо не дало хорошего результата (т.е. язык и кодировка документа "не похожи" на представленные в загруженных картах), то в качестве кодировки документа будет использована кодировка, указанная в команде RemoteCharset. Если же кодировка по-умолчанию не указана, то будет использована iso-8859-1 (latin1).
Вы можете установить язык документов по-умолчанию с помощью команды DefaultLang в файле indexer.conf. Это может пригодиться, например, во время поиска для ограничения поиска только по документам на указанном языке.
DefaultLang <string>
Задаёт язык документов по умолчанию.
DefaultLang en
Чтобы указать кодировку, в которой будут оторбражаться результаты поиска, используйте команду BrowserCharset в search.htm. BrowserCharset может отличаться от LocalCharset. Поисковая программа произведет перекодировку автоматически.
Задаёт кодировку, которая будет использоваться для хранения информации в базе данных. Данные во всех других кодировках будут перекодированы в эту кодировку. См. Разд. 7.1 для подробного описания как выбрать LocalCharset для языков, используемых на вашем сайте или сайтах, а также списка поддерживаемых кодировок. Эта команда должны быть задана один раз и имеет глобальный эффект для всего файла конфигрурации. Значение по умолчанию: iso-8859-1 (latin1).
LocalCharset koi8-r
RemoteCharset <charset>
<сharset> - кодовая страница по умолчанию для последующих команд Server, Realm или Subnet. Используется при индексировании "плохих" серверов, не предоставляющих информации о кодировке в заголовках ответа сервера или в <META NAME="Content" Content="text/html; charset="some_charset"> на страницах. Команда действует до конца файла, или до следующей команды RemoteCharset. Значение по умолчанию: iso-8859-1 (latin1).
RemoteCharset iso-8859-5
URLCharset <charset>
<charset> - кодовая страница для аргументов последующих команд Server, Realm или URL. Эта команда задаёт кодовубю страницу только для аргументов последующих команду и не влияет на определение кодировки индексируемых страниц. Имеет меньший приоритет, нежели команда RemoteCharset. Может задаваться перед каждой командой Server, Realm или URL и действует до конца файла конфигурации или до следующей команды URLCharset. Значение по умолчанию: ISO-8859-1 (latin1).
URLCharset KOI8-R
CharsToEscape "\"&<>![]"
Используйте эту команду в вашем поисковом шаблоне для указания списка эскейп-символов для мета-переменных поискового шаблона типа $&(x).