![]() |
Добавить Архитектура Запросы сейчас Цифры и факты FAQ Кнопка поиска Сделать стартовой |
![]() |
Search System Assembly Language -- SSAL/1.0
Статус этого документа
Этот документ описывает внутренний для компании Stack Technologies Ltd. стандарт взаимодействия инициатора поискового запроса QP с группой Поисковых Процессоров SP посредством языка мнемоник операций. Документ предназначен для служебного использования. Этот документ может и должен являться предметом обсуждения, с внесением изменений. Соблюдение согласованного стандарта всеми сотрудниками, занятыми в разработке поисковой системы обязательно.Copyright Notice
Copyright © Stack Technologies Ltd. (2001). All Rights Reserved.
Содержание.
1. Введение. Search System Assembly Language (SSAL) является достаточно простым формальным представлением действий, которые должны быть осуществлены комплексом компонент Поисковой Системы (Search System) для выполнения начальных условий поискового запроса. Документ должен рассматриваться в совокупности с описанием Search System Transfer Protocol (SSTP/1.0) и является его логическим дополнением. 1.1 Назначение. SSAL призван формально описать последовательность действий каждого задействованного в работе элемента (SP) Поисковой Системы, а также порядок взаимодействия SP друг с другом. В процессе разработки компонент поисковой системы выяснилось, что концепция планов, описанная в SSTP, не является достаточной для удовлетворения запросов произвольной сложности. В качестве логического развития концепции поисковых планов предлагается концепция поисковых программ.
- 1. Введение.
- 1.1 Назначение.
- 1.2 Термины и понятия.
- 1.3 Общие принципы работы.
- 2. Синтаксис поисковой программы.
- 3. Операторы.
- 3.1 LOA (load data)
- 3.2 RLD (remote load data)
- 3.3 CPY (copy data)
- 3.4 AND (logical AND)
- 3.5 CND (logical Coordinate AND)
- 3.6 PND (logical AND with distance)
- 3.7 ORR (logical OR)
- 3.8 POR (logical OR with weight subtraction)
- 3.9 NOT (logical NOT)
- 3.10 XOR (logical exclude OR)
- 3.11 MUL (multiply weights)
- 3.12 DUP (duplicate data)
- 3.13 JZR (jump if zero)
- 3.14 SWP (swap data)
- 3.15 DST (set distance for PND)
- 3.16 CCW (calculate coordinate weights)
- 3.17 LBL (label)
- 3.18 ZLZ (jamp label if zero)
- 4. Описатель поискового термина.
- 4.1 HEADER_MAXBACKETS
- 4.2 HEADER_LANGUAGES
- 4.3 HEADER_THEMEFOUND
- 4.4 HEADER_FIELD
- 4.5 HEADER_BACKETID
- 5. Пример поисковой программы.
Данная концепция принципиально отличается от концепции планов тем, что взаимодействие элементов Поисковой Системы может происходить на любом из этапов выполнения программы, а не только перед осуществлением локальных действий, как это было предусмотрено в поисковых планах. Для достижения цели максимальной гибкости был разработан ассемблер поисковых запросов. 1.2 Термины и понятия.
1.3 Общие принципы работы. Посредством SSTP протокола SP принимает запрос от QP и интерпретирует его, согласно данной спецификации последовательно выполняя команды, содержащиеся в заголовке запроса QP. В процессе своей работы SP придерживается следующих правил:
- Поисковая программа
- Текст, составленный Оптимизатором Запросов Query Parser (QP), выполненный в виде сообщения SSTP/1.0 (см. документацию Search System Transfer Protocol), формально описывающий последовательность действий Процессора Поиска Search Processor (SP) и порядок его взаимодействия с другими SP системы. Программа передается от QP к выбранному SP, после чего QP находится в состоянии ожидания ответа от SP. Передача и прием сообщений осуществляется посредством SSTP.
- Поисковый Регистр
- Логическая регистр Поискового Процессора, в который может быть заложена информация о конкретном поисковом термине. Поисковый термин описывается структурой, включающей в себя ID документов, в которых данный поисковый термин встречается, их нормированные веса (weights) для данного поискового термина и координатную информацию, описывающую последовательность вхождения данного поискового термина для каждого ID документа, содержащего в себе данный термин.
- Поисковая ячейка памяти
- Логическое место, в котором может быть сохранена информация по конкретному поисковому термину и/или информация, являющаяся результатом операций Поискового Процессора.
- Метка
- Условное текстовое обозначение поисковой ячейки памяти в поисковой программе. Фактически присвоение имени одной из используемых поисковых ячеек памяти.
- Поисковая логическая операция
- Действия над поисковыми регистрами и/или ячейками памяти, порождающие новый набор информации, характеризующий совокупность поисковых терминов по определенному закону.
- Пересечение поисковых терминов
- Поисковая логическая операция, результатом которой являются данные об ID документов, которые содержат каждый из поисковых терминов, вес документов является арифметической суммой весов каждой составляющей пересечения. Координатная информация каждого поискового термина объединяется. Для простоты имеет название "логическое И".
- Объединение поисковых терминов
- Поисковая логическая операция, результатом которой являются данные об ID документов, которые содержат хотя бы один из поисковых терминов, вес документов, содержащих оба поисковых термина, является суммой каждой из компонент. Для простоты имеет название "Логическое ИЛИ".
- Исключение поисковых терминов
- Поисковая логическая операция, результатом которой являются данные об ID документов, которые содержат первый поисковый термин, но не содержат второй. Веса документов остаются неизменными. Для простоты называется "Логическое НЕ".
- Координатное пересечение терминов
- Поисковая логическая операция, аналогичная по результату пересечению поисковых терминов. Отличие заключается в том, что координатная информация не объединяется, а содержит только информацию от второго поискового термина. Операция предназначена исключительно для нахождения вхождений полной фразы в документы, так как она указана в запросе.
- Частичное исключение поисковых терминов.
- Поисковая логическая операция, аналогичная объединению поисковых терминов. Различия заключаются в том, что результирующие веса для ID документов, содержащих оба искомых термина, не складываются, а вычитаются. Используется для поднятия веса документов, не содержащих второго поискового термина.
- Изменение веса поискового термина.
- Логическая операция, не изменяющая количественно результат, но изменяющая весовые показатели для операнда путем домножения каждого из них на определенный в операции множитель. Используется для искусственного поднятия веса документов, содержащих определенный набор свойств поисковых терминов.
- Объединение с исключением поисковых терминов
- Логическая операция, результатом которой будут являться ID документов, содержащие хотя бы один из терминов, но не содержащие оба термина одновременно. Применение не рекомендуется вследствие надуманности необходимости такой операции.
2. Синтаксис поисковой программы. Поисковая программа является частью SSTP сообщения, входящая в его заголовок. Каждая инструкция Поисковому Процессору представляет собой SSTP заголовок вида:
- Каждый SP имеет два поисковых регистра, условно называемых в программе "reg1" и "reg2".
- Логические операции осуществляются над поисковыми регистрами и/или поисковыми ячейками памяти, помеченными соответствующими метками. Вторым операндом логической операции может также являться непосредственно описатель данных.
- В качестве метки может быть определено любое сочетание символов, которое пригодно для прочтения (printable) длиной, не превышающее 8 символов.
- В любой логической операции принимают участие два операнда (если отдельно не оговорено иное), результатом операции являются данные, помещенные в первый операнд. Значения операндов, участвующих в операции очищаются. Не рекомендуется использовать операции с обоими операндами типа регистр (используйте их только в том случае, если до конца понимаете, что при этом происходит в Процессоре Поиска). Рекомендуется использовать регистр reg1 и адресацию непосредственно к поисковому термину (второй операнд - поисковый термин, с возможным последующим его описанием).
- После удаленного выполнения программы значения регистров, не участвующих в операции всегда не определено (портятся). Вызов удаленного выполнения программы эквивалентен call функции и вызывающий никогда не знает, как и зачем будет использовать вызываемая функция регистры. Операции загрузки данных с удаленного SP могут следовать друг за другом, при условии, что удаленная загрузка данных будет производиться в ячейку памяти, а не в регистр. При этом загрузка будет осуществляться многопоточно.
- Поисковый Процессор очищает все используемые регистры и поисковые ячейки памяти, известные ему перед окончанием запроса. Ответственность за логику выполнения запроса полностью несет его формирователь, т.е. QP.
- Поисковый Процессор всегда возвращает по окончании программы данные регистра "reg1".
- Регистры "reg1" и "reg2" перед началом выполнения программы всегда пусты, значения ячеек памяти не определены.
- Любая программа заканчивается служебным полем "Ws: 0" (размер расширенных данных запроса, см. документацию SSTP/1.0).
Opr: Op_name operand1,operand2где Opr_name условное обозначение кода операции, operand1 и operand2 - условные обозначения операндов действия.
Передача программы внешнему SP для его выполнения всегда начинается с операции RLD (remote load) и в качестве операнда содержит имя (или IP адрес) внешнего SP, с которым надо установить взаимодействие, передать программу и ожидать от него результатов ее выполнения. Если запрос содержит несколько внешних программ, и в описании они следуют друг за другом, то они могут выполняться параллельно на разных SP. Первая операция с локальными данными всегда вызывает выполнение внешних программ, если таковые были определены.
Все действия, которые должны провести внешние для данного процессора SP следуют за оператором RLD и обрамлены в виде HEADER_PLAN полей.
Если имя операции подразумевает чтение данных с диска (LOA или использование адресации по поисковому термину), то следом за определением операции могут находиться определители данных, что собственно читать с диска. Некоторые параметры определения данных могут быть опущены, в этих случаях принимаются значения по умолчанию. 3. Операторы. Условными обозначениями операторов являются зарезервированные слова SSAL. Только эти обозначения могут фигурировать в первой позиции значения операции. Операторы, не распознанные SP, игнорируются.
Примеры оператора:
Opr: AND reg1,word1 Opr: LOA reg2,word2 Opr: CPY reg1,metka Opr: NOT reg1,reg23.1 LOA Используется для считывания данных поискового термина из базы данных в регистр. Следом за оператором могут следовать инструкции, уточняющие информацию о том, что надо загрузить (см. 4. Описатель поискового термина).Пример:
Opr: LOA reg1,promotionВ регистр "reg1" будут загружены данные по поисковому термину "promotion". Если ниже отсутствует описатель данных, то по умолчанию будут загружены данные первой "корзины" индекса без включения каких-нибудь фильтров. Важно понимать, что любая операция LOA связана с отведением памяти для считываемых из базы данных. Первым операндом всегда является один из регистров, вторым всегда является поисковый термин.
Описатель данных может состоять из:
- HEADER_CAPITALIZED: mult
- HEADER_LANGUAGES: lang_code
- HEADER_THEMEFOUND: theme_code
- HEADER_MAXBACKETS: num_backets
- HEADER_BACKETID: num1 num2 num3...
Две повторные операции LOA в один и тот же регистр являются ошибкой программы, т.к. приводят к утечке памяти на SP. 3.2 RLD Удаленная загрузка данных с другого SP. Первым операндом является регистр или метка ячейки памяти, в которую будут помещены данные после удаленной загрузки. Вторым операндом всегда является имя SP, данные с которого будут считываться по сети. Следом за этой инструкцией всегда должен следовать полный текст программы для удаленного SP, оформленного в виде SSTP сообщения (включая код запроса), и обрамленного полями HEADER_PLAN ("Pln"). Код запроса для выполнения внешней программы REQ_GET_BINARYPROGRAM (см. Search System Transfer Protocol).
Пример:
Opr: RLD tmp,searcher-001.turtle.ru Pln: 64 Pln: Opr: LOA reg1,hardware Pln: Ws: 0Данный фрагмент означает: загрузить удаленно с машины searcher-001.turtle.ru данные, которые будут получены в результате операций, указанных в полях HEADER_PLAN ("Pln") и поместить эти данные в ячейку памяти с именем "tmp". Эти данные представляют собой поисковую информацию о слове "hardware". 3.3 CPY Операция перенесения данных из регистра в ячейку памяти или из ячейки памяти в регистр. В качестве меток ячеек памяти могут использоваться и сами поисковые термины, однако это не рекомендуется, т.к. понимаемость кода программы может при этом усложниться. Количество ячеек памяти для одной программы не ограничивается, однако следует иметь в виду, что это отнимает память на SP и следует использовать эти операции только в случае жесткой необходимости сохранить промежуточный результат. Копируется первый операнд во второй.
Пример:
Opr: CPY reg1,tmp3.4 AND Произвести пересечение поисковых терминов операндов, результат находится в первом операнде. Первый операнд всегда является регистр. Содержимое первого операнда до логической операции заменяется на результат. Не возможно произвести повторную операцию с бывшим содержанием регистра, если он не был предварительно сохранен в ячейке памяти (DUP). Вторым операндом может являться регистр, ячейка памяти или непосредственно описатель поискового термина. В последнем случае, для второго операнда отводится внутренняя структура данных, содержимое которой впоследствии становится также недоступным и автоматически освобождается после выполнения логической операции пересечения.Пример:
Opr: LOA reg1,promotion Opr: AND reg1,siteПример осуществляет поиск документов, содержащих слова "promotion" и "site". Этот же пример можно описать и так:
Opr: LOA reg1,promotion Opr: LOA reg2,site Opr: AND reg1,reg2По сути оба способа эквивалентны, но первый отличается компактностью. 3.5 CND Произвести координатное пересечение поисковых терминов. Оператор используется для нахождения полной фразы в запросе. В отношении регистров и ячеек памяти используются правила описанные выше.
Пример:
Opr: LOA reg1,promotion Opr: CND reg1,siteБудут найдены данные по точной фразе "promotion site". Замечание: как и в первом случае, данные в примере по поисковым терминам должны находиться в пределах ответственности одного и того же локального SP, для получения данных по внешним поисковым терминам используются оператор RLD и описатели HEADER_PLAN. 3.6 PND Выполнить операцию пересечения двух терминов с учетом координат, оба термина должны располагаться в пределах одной фразы.
Пример:
Opr: LOA reg1,promotion Opr: PND reg1,sizteБудут выданы документы, содержащие термины 'promotion' и 'site' в пределах одной фразы (между ними не будет знаков препинания). 3.7 ORR Выполнить операцию объединения поисковых терминов. В отношении регистров и ячеек памяти используются правила описанные выше.
Пример:
Opr: LOA reg1,technical Opr: ORR reg1,trchnologyБудут найдены документы, содержащие поисковые термины "technical" и "technology". Наивысший приоритет при прочих равных условиях будут иметь ID документов, в которых встречаются оба термина одновременно. 3.8 POR Произвести частичное исключение данных операнда 2 из данных операнда 1. В отношении регистров и ячеек памяти используются правила описанные выше. Предлагается использовать данные директивы вместо NOT операций.
Пример:
Opr: LOA reg1,technical Opr: POR reg1,trchnology3.9 NOT Произвести исключение данных операнда 2 из данных операнда 1. В отношении регистров и ячеек памяти используются правила описанные выше. Использование не рекомендуется.Пример:
Opr: LOA reg1,technical Opr: POR reg1,support3.10 XOR Произвести объединение с исключением поисковых терминов. В отношении регистров и ячеек памяти используются правила описанные выше. Использование не рекомендуется в силу надуманности необходимости такой операции.Пример:
Opr: LOA reg1,technical Opr: XOR reg1,support3.11 MUL Произвести изменение веса термина операнда. Веса ID документов домножаются на множитель, указанный в операнде 2, который должен быть представлен в float виде.Пример:
Opr: MUL reg1,10 Opr: MUL reg2,0.13.12 DUP Произвести дублирование данных операнда1 в операнд2. Отличается от CPY тем, что под данные отводится новая память, и в памяти SP одновременно будут существовать два идентичных по содержанию объекта. Рекомендуется использовать с крайней осторожностью.Пример:
Opr: DUP reg1,tmp Opr: DUP reg2,reg1 Opr: DUP tmp1,tmp2 3.13 JZR Оператор условного перехода. Если значение первого операнда (регистр или ячейка памяти) ноль, то изменить счетчик команд на количество, указанное в операнде 2. Операнд 2 может являться знаковым числом. Обычно этот оператор используется для завершения программы, в случае если полученный на каком-то этапе результат равен нулю и последующих действий нет необходимости выполнять. Если счетчик команд попадет в результате за пределы программы, то программа окончит свое выполнение на данном SP. Не рекомендуется использовать отрицательные значения инкремента счетчика команд.
Пример:
Opr: JZR reg1,100 Opr: JZR tmp,-103.14 SWP Обменять содержание операндов. Может применяться при оптимизации программ координатного поиска. В качестве операндов может быть либо регистр, либо ячейка памяти. Ячейки памяти не могут являться обоими операндами одновременно.Пример:
Opr: SWP reg1,reg2 Opr: SWP reg1,mem13.15 DST Установить расстояние (distance) по умолчанию при выполнении инструкции PND между искомыми терминами. Устанавливает внутренний регистр процессора сравнения в значение первого операнда. Разрешенные значения находятся в интервале [1; 255]. При указании неверного значения, значение внутреннего регистра не изменяется.Пример:
Opr: DST 2423.16 CCW Произвести вычисление весов для ID документов операнда 1. Обычно используется в конце программы, для внесения дополнительного веса над результатами поиска в зависимости от координатной информации (степени близости) найденных терминов. Команда выполняется над первым операндом, который является регистром или ячейкой памяти. Вторым операндом может являться константа вхождения веса координатной информации в результирующий вес, в представлении с плавающей точкой. Если второй операнд отсутствует, то эта константа полагается равной 0.1.Пример:
Opr: CCW reg1 Opr: CCW my_memory_unit,0.683.17 LBL Используется как метка в программе для оператора кондиционного перехода.Пример:
Opr: LBL my_label3.18 JLZ Передать управление программы в позицию метки при условии что первый операнд равен нулю. Первый операнд может быть регистром или ячейкой памяти, второй операнд всегда является именем метки перехода. Если метка в программе будет не найдена, то выполнение программы продолжится обычным путем.Пример:
Opr: JLZ reg1,my_label Opr: AND reg1,reg2 ...................... ...................... Opr: LBL my_label4. Описатель поискового термина. Поисковый термин в простейшем случае описывается просто поисковым словом, участвующем в поисковой программе в качестве второго операнда операции. В некоторых случаях, данные по поисковому термину полезно уточнить с помощью специально для этого предназначенных полей-описателей. 4.1 HEADER_MAXBACKETS4.2 HEADER_LANGUAGES
- Имя:
- Mxb
- Значение:
- Максимальное количество порций ('корзин') индекса, считываемых с диска для поискового термина. Каждая порция содержит в себе не более чем N значений ID документов для данного слова (N определяется конфигурационно на SP, по умолчанию 200000). Данные будут прочитаны, начиная с нулевой корзины.
- Пример:
- Mxb: 3
- Значение по умолчанию:
- 1
4.3 HEADER_THEMEFOUND
- Имя:
- Lgs
- Значение:
- Код языка, для которого будут прочитаны документы, содержащие поисковый термин. Фильтр.
- Значение по умолчанию:
- 0 (документы любого языка)
4.4 HEADER_FIELD
- Имя:
- Ntf
- Значение:
- Код темы документов, содержащих поисковый термин. Фильтр.
- Значение по умолчанию:
- 0 (документы любой темы).
- Имя:
- Fld
- Значение:
- Десятичное или шестнадцатеричное беззнаковое комплексное 32-разрядное число, определяющее фильтр для поиска термина. Младшие 8 разрядов определяют базовый язык документов выборки, старшие 8 разрядов определяют принадлежность поискового термина к определенной группе HTML тэгов (например, 0x80000000 определяет принадлежность к <TITLE>) см. описание CA. Средние 16 разрядов определяют принадлежность документов к определенной теме.
- Пример:
- Fld: 0x80000001
- Значение по умолчанию:
- 0 (любое поле, любая тема, любой язык)
Macro определения:
#define LEX_IN_TITLE 0x80000000 /* TITLE */ #define LEX_IN_HEADER 0x40000000 /* H1-H6 */ #define LEX_IN_MARKED 0x20000000 /* B,STRONG,I,U etc. */ #define LEX_IN_ESSENCE 0x10000000 /* First 512 bytes of document */ #define LEX_IN_REF 0x08000000 /* in <a href="┘" */ #define LEX_IN_IMAGE 0x04000000 /* in <img src="┘" */ #define LEX_IN_VIDEO 0x02000000 /* in <a href="┘" - video reference */ #define LEX_IN_AUDIO 0x01000000 /* in <a href="┘" - audio reference */4.5 HEADER_BACKETID5. Пример запроса, содержащего поисковую программу.
- Имя:
- Bid
- Значение:
- Перечень номеров корзин для чтения данных поискового термина, разделенных пробелом. Используется нулевая база в нумерации.
- Пример:
- Bid: 0 4 7
63\r\n Opr: LOA reg1,berkeley\r\n Fld: 0x20000000\r\n Bid: 0 1\r\n Opr: CPY reg1,tmp\r\n Opr: RLD reg1,searcher-002.turtle.ru\r\n Pln: 64\r\n Pln: Opr: LOA reg1,db\r\n Pln: Opr: AND reg1,reference\r\n Pln: Ws: 0\r\n Opr: AND reg1,tmp\r\n Ws: 0 \r\nДанный пример иллюстрирует операцию поиска документов, содержащих все слова "berkeley", "db", "reference". При этом подразумевается, что индексные данные слов "db" и "reference" находятся на внешнем SP (searcher-002.turtle.ru). Слово "berkeley" должно содержаться выделенным типом в найденных документах.
Того же результата можно достигнуть с помощью:
63\r\n Opr: LOA tmp,Berkeley\r\n Fld: 0x20000000\r\n Opr: RLD tmp2,searcher-002.turtle.ru\r\n Pln: 64\r\n Pln: Opr: LOA reg1,db\r\n Pln: Ws: 0\r\n Opr: RLD tmp3,searcher-002.turtle.ru\r\n Pln: 64\r\n Pln: Opr: LOA reg1,reference\r\n Pln: Ws: 0\r\n Opr: CPY tmp,reg1\r\n Opr: AND reg1,tmp2\r\n Opr: AND reg1,tmp3\r\n Ws: 0\r\n \r\nПриведенные примеры не являются оптимальными, а лишь иллюстрируют возможные варианты.
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
Черепаший Ранк. Реклама на Turtle Логотипы Правовая информация Конфиденциальность Контакты |
![]() |
![]() |
![]() ![]() ![]() |