НАЧАЛО >> Нативный провайдер данных DP_Irbis64Native >> Поиск и словарь📄 Скачать в DOCX
Поиск в DP_Irbis64Native основан на словаре и обратном индексе ИРБИС64. Провайдер читает термины из файлов словаря, получает postings из IFP и формирует список MFN для прикладных модулей.
Функции Search, SearchSrv, SearchMfn и RecSearch принимают поисковое выражение, разбирают его и получают список найденных MFN. Для прикладного пользователя это выглядит как обычный поиск ИРБИС 128, а на уровне провайдера выполняются операции со словарем и postings.
Типовой порядок:
Для просмотра словаря используются:
GetTermList - получает список терминов от заданной позиции;FindTerm - ищет конкретный термин;NextTerm и PrevTerm - переходят к соседним терминам;GetPostingList - возвращает postings для термина;GetMfnPostingList - возвращает список MFN по postings.Эти операции используются поисковыми страницами, автодополнением, фасетами и внутренними сервисами.
Каждая ссылка термина на запись хранит не только MFN, но и координаты термина внутри записи: метку поля, номер повторения и позицию. Метка поля (pTag) берется из первой колонки правила FST, по которому сформирован термин. Поэтому для поиска по важным полям нужно задавать в FST отдельные правила с осмысленными метками этих полей, а не собирать разные поля одним общим правилом.
Эта координата используется в контекстном поиске:
(G) оставляет совпадения, где термины находятся в одном поле;(F) оставляет совпадения в одном повторении поля;Для точечного ограничения термина по полям поддерживается уточнение последней частью термина: K=ИСТОРИЯ/200 или K=ИСТОРИЯ/200,210. Такое уточнение не меняет сам словарный термин, а фильтрует его postings по pTag. Если FST записала термин с общей служебной меткой, поиск не сможет отличить, из какого исходного поля был получен термин.
Функция GetFasets строит группировки по найденному набору записей. Для сортировки используются SortMfnByPref, SortMfnBySrw и SavePostingListForSort. Размер сортируемого результата ограничивается настройкой MAX_SORT_COUNT, чтобы длинные поисковые выдачи не приводили к чрезмерной нагрузке.
FreeSearch применяется для сценариев, где нужно искать не только по подготовленному поисковому выражению, но и по свободному тексту. Конкретный результат зависит от настроек индексации базы и доступных префиксов.
На объем операций влияют настройки:
MAX_POSTINGS_IN_PACKET - максимальный размер пакета postings;MAX_POSTINGS_IN_PACKET_WITH_FORMAT - размер пакета при поиске с форматированием;BlockSearch - режим блочного поиска;UpDownSearchResult - порядок обработки результата;MAXMFN - верхняя граница MFN.Если результат слишком большой, прикладной модуль должен выводить его постранично и не пытаться форматировать все записи сразу.
Поиск корректен только при согласованном обратном индексе. После сохранения, удаления, импорта или массовой корректировки база должна быть актуализирована. Если индекс не обновлен, запись может читаться по MFN, но отсутствовать в поисковой выдаче или оставаться в выдаче по старым терминам.