Turtle

 
 
 
   РАСШИРЕННЫЙ ПОИСК
   ПОИСК ПО ФРАГМЕНТУ
   ПОМОЩЬ
   ПРОСТАЯ ФОРМА
 
 СИНОНИМЫ   ВСЕ ФОРМЫ СЛОВ
 Добавить   Архитектура   Запросы сейчас   Цифры и факты   FAQ   Кнопка поиска   Сделать стартовой 

Search System Assembly Language -- SSAL/1.0

Статус этого документа

Этот документ описывает внутренний для компании Stack Technologies Ltd. стандарт взаимодействия инициатора поискового запроса QP с группой Поисковых Процессоров SP посредством языка мнемоник операций. Документ предназначен для служебного использования. Этот документ может и должен являться предметом обсуждения, с внесением изменений. Соблюдение согласованного стандарта всеми сотрудниками, занятыми в разработке поисковой системы обязательно.

Copyright Notice

Copyright © Stack Technologies Ltd. (2001). All Rights Reserved.

Содержание.

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. Введение.

Search System Assembly Language (SSAL) является достаточно простым формальным представлением действий, которые должны быть осуществлены комплексом компонент Поисковой Системы (Search System) для выполнения начальных условий поискового запроса. Документ должен рассматриваться в совокупности с описанием Search System Transfer Protocol (SSTP/1.0) и является его логическим дополнением.

1.1 Назначение.

SSAL призван формально описать последовательность действий каждого задействованного в работе элемента (SP) Поисковой Системы, а также порядок взаимодействия SP друг с другом. В процессе разработки компонент поисковой системы выяснилось, что концепция планов, описанная в SSTP, не является достаточной для удовлетворения запросов произвольной сложности. В качестве логического развития концепции поисковых планов предлагается концепция поисковых программ.

Данная концепция принципиально отличается от концепции планов тем, что взаимодействие элементов Поисковой Системы может происходить на любом из этапов выполнения программы, а не только перед осуществлением локальных действий, как это было предусмотрено в поисковых планах. Для достижения цели максимальной гибкости был разработан ассемблер поисковых запросов.

1.2 Термины и понятия.

Поисковая программа
Текст, составленный Оптимизатором Запросов 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 документов, содержащие хотя бы один из терминов, но не содержащие оба термина одновременно. Применение не рекомендуется вследствие надуманности необходимости такой операции.

1.3 Общие принципы работы.

Посредством SSTP протокола SP принимает запрос от QP и интерпретирует его, согласно данной спецификации последовательно выполняя команды, содержащиеся в заголовке запроса QP. В процессе своей работы SP придерживается следующих правил:
  1. Каждый SP имеет два поисковых регистра, условно называемых в программе "reg1" и "reg2".
  2. Логические операции осуществляются над поисковыми регистрами и/или поисковыми ячейками памяти, помеченными соответствующими метками. Вторым операндом логической операции может также являться непосредственно описатель данных.
  3. В качестве метки может быть определено любое сочетание символов, которое пригодно для прочтения (printable) длиной, не превышающее 8 символов.
  4. В любой логической операции принимают участие два операнда (если отдельно не оговорено иное), результатом операции являются данные, помещенные в первый операнд. Значения операндов, участвующих в операции очищаются. Не рекомендуется использовать операции с обоими операндами типа регистр (используйте их только в том случае, если до конца понимаете, что при этом происходит в Процессоре Поиска). Рекомендуется использовать регистр reg1 и адресацию непосредственно к поисковому термину (второй операнд - поисковый термин, с возможным последующим его описанием).
  5. После удаленного выполнения программы значения регистров, не участвующих в операции всегда не определено (портятся). Вызов удаленного выполнения программы эквивалентен call функции и вызывающий никогда не знает, как и зачем будет использовать вызываемая функция регистры. Операции загрузки данных с удаленного SP могут следовать друг за другом, при условии, что удаленная загрузка данных будет производиться в ячейку памяти, а не в регистр. При этом загрузка будет осуществляться многопоточно.
  6. Поисковый Процессор очищает все используемые регистры и поисковые ячейки памяти, известные ему перед окончанием запроса. Ответственность за логику выполнения запроса полностью несет его формирователь, т.е. QP.
  7. Поисковый Процессор всегда возвращает по окончании программы данные регистра "reg1".
  8. Регистры "reg1" и "reg2" перед началом выполнения программы всегда пусты, значения ячеек памяти не определены.
  9. Любая программа заканчивается служебным полем "Ws: 0" (размер расширенных данных запроса, см. документацию SSTP/1.0).

2. Синтаксис поисковой программы.

Поисковая программа является частью SSTP сообщения, входящая в его заголовок. Каждая инструкция Поисковому Процессору представляет собой SSTP заголовок вида:

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,reg2

3.1 LOA

Используется для считывания данных поискового термина из базы данных в регистр. Следом за оператором могут следовать инструкции, уточняющие информацию о том, что надо загрузить (см. 4. Описатель поискового термина).

Пример:

Opr: LOA reg1,promotion

В регистр "reg1" будут загружены данные по поисковому термину "promotion". Если ниже отсутствует описатель данных, то по умолчанию будут загружены данные первой "корзины" индекса без включения каких-нибудь фильтров. Важно понимать, что любая операция LOA связана с отведением памяти для считываемых из базы данных. Первым операндом всегда является один из регистров, вторым всегда является поисковый термин.

Описатель данных может состоять из:

Две повторные операции 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,tmp

3.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,trchnology

3.9 NOT

Произвести исключение данных операнда 2 из данных операнда 1. В отношении регистров и ячеек памяти используются правила описанные выше. Использование не рекомендуется.

Пример:

Opr: LOA reg1,technical
Opr: POR reg1,support

3.10 XOR

Произвести объединение с исключением поисковых терминов. В отношении регистров и ячеек памяти используются правила описанные выше. Использование не рекомендуется в силу надуманности необходимости такой операции.

Пример:

Opr: LOA reg1,technical
Opr: XOR reg1,support

3.11 MUL

Произвести изменение веса термина операнда. Веса ID документов домножаются на множитель, указанный в операнде 2, который должен быть представлен в float виде.

Пример:

Opr: MUL reg1,10
Opr: MUL reg2,0.1

3.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,-10

3.14 SWP

Обменять содержание операндов. Может применяться при оптимизации программ координатного поиска. В качестве операндов может быть либо регистр, либо ячейка памяти. Ячейки памяти не могут являться обоими операндами одновременно.

Пример:

Opr: SWP reg1,reg2
Opr: SWP reg1,mem1

3.15 DST

Установить расстояние (distance) по умолчанию при выполнении инструкции PND между искомыми терминами. Устанавливает внутренний регистр процессора сравнения в значение первого операнда. Разрешенные значения находятся в интервале [1; 255]. При указании неверного значения, значение внутреннего регистра не изменяется.

Пример:

Opr: DST 242

3.16 CCW

Произвести вычисление весов для ID документов операнда 1. Обычно используется в конце программы, для внесения дополнительного веса над результатами поиска в зависимости от координатной информации (степени близости) найденных терминов. Команда выполняется над первым операндом, который является регистром или ячейкой памяти. Вторым операндом может являться константа вхождения веса координатной информации в результирующий вес, в представлении с плавающей точкой. Если второй операнд отсутствует, то эта константа полагается равной 0.1.

Пример:

Opr: CCW reg1
Opr: CCW my_memory_unit,0.68

3.17 LBL

Используется как метка в программе для оператора кондиционного перехода.

Пример:

Opr: LBL my_label

3.18 JLZ

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

Пример:

Opr: JLZ reg1,my_label
Opr: AND reg1,reg2
......................
......................
Opr: LBL my_label

4. Описатель поискового термина.

Поисковый термин в простейшем случае описывается просто поисковым словом, участвующем в поисковой программе в качестве второго операнда операции. В некоторых случаях, данные по поисковому термину полезно уточнить с помощью специально для этого предназначенных полей-описателей.

4.1 HEADER_MAXBACKETS

Имя:
Mxb
Значение:
Максимальное количество порций ('корзин') индекса, считываемых с диска для поискового термина. Каждая порция содержит в себе не более чем N значений ID документов для данного слова (N определяется конфигурационно на SP, по умолчанию 200000). Данные будут прочитаны, начиная с нулевой корзины.
Пример:
Mxb: 3
Значение по умолчанию:
1

4.2 HEADER_LANGUAGES

Имя:
Lgs
Значение:
Код языка, для которого будут прочитаны документы, содержащие поисковый термин. Фильтр.
Значение по умолчанию:
0 (документы любого языка)

4.3 HEADER_THEMEFOUND

Имя:
Ntf
Значение:
Код темы документов, содержащих поисковый термин. Фильтр.
Значение по умолчанию:
0 (документы любой темы).

4.4 HEADER_FIELD

Имя:
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_BACKETID

Имя:
Bid
Значение:
Перечень номеров корзин для чтения данных поискового термина, разделенных пробелом. Используется нулевая база в нумерации.
Пример:
Bid: 0 4 7

5. Пример запроса, содержащего поисковую программу.

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
 Черепаший Ранк.   Реклама на Turtle   Логотипы   Правовая информация   Конфиденциальность   Контакты 
    ©ЗАО "Группа компаний Стек". 2003-2007