Xapian — различия между версиями

Материал из Национальной библиотеки им. Н. Э. Баумана
м
м
Строка 36: Строка 36:
 
Вместе с библиотекой предоставляется несколько маленьких образцов программ, которые используют библиотеку, а также большое приложение, - Omega, - индексатор и CGI-скрипт для вывода результатов поиска.<ref group="Источник">Использование библиотеки для полнотекстового поиска Xapian в Python // Хабрахабр [2006—2018]. Дата обновления: 13.02.2011. URL: https://habrahabr.ru/post/113657/ (дата обращения: 21.03.2018).</ref>
 
Вместе с библиотекой предоставляется несколько маленьких образцов программ, которые используют библиотеку, а также большое приложение, - Omega, - индексатор и CGI-скрипт для вывода результатов поиска.<ref group="Источник">Использование библиотеки для полнотекстового поиска Xapian в Python // Хабрахабр [2006—2018]. Дата обновления: 13.02.2011. URL: https://habrahabr.ru/post/113657/ (дата обращения: 21.03.2018).</ref>
  
Индексатор умеет индексировать документы [[HTML (HyperText Markup Language)|HTML]], [[PHP (язык программирования)|PHP]], [[PDF (Portable Document Format)|PDF]], [[PostScript]], [[OpenOffice]]/[[StarOffice]], [[OpenDocument]], [[Microsoft Word]]/[[Microsoft Excel|Excel]]/[[Microsoft PowerPoint|PowerPoint]]/[[Microsoft Works|Works]], [[WordPerfect]], [[AbiWord]], [[RTF (Rich Text Format)|RTF]], [[DVI]], [[Perl|Perl POD]], а также простой текст. Научить индексатор поддерживать другие форматы довольно легко при наличии доступного фильтра для преобразования. Этот индексатор работает с локальными файлами, но также имеется скрипт, позволяющий это изменить и создать веб-паука для организации поиска по удаленным сайтам с использованием Omega.
+
Индексатор умеет индексировать документы [[HTML (HyperText Markup Language)|HTML]], [[PHP (язык программирования)|PHP]], [[PDF (Portable Document Format)|PDF]], [[PostScript]], [[OpenOffice]]/[[StarOffice]], [[OpenDocument]], [[Microsoft Word]]/[[Microsoft Excel|Excel]]/[[Microsoft PowerPoint|PowerPoint]]/[[Microsoft Works|Works]], [[WordPerfect]], [[AbiWord]], [[RTF (Rich Text Format)|RTF]], DVI, [[Perl|Perl POD]], а также простой текст. Научить индексатор поддерживать другие форматы довольно легко при наличии доступного фильтра для преобразования. Этот индексатор работает с локальными файлами, но также имеется скрипт, позволяющий это изменить и создать веб-паука для организации поиска по удаленным сайтам с использованием Omega.
  
  

Версия 00:27, 24 июня 2020

Xapian
Xapian-logo.png
Разработчики: xapian.org
Постоянный выпуск: 1.4.15 / 8 June 2020 года; 2 months ago (2020-06-08)
Написана на: C++
Операционная система: Кросс-платформенное
Тип ПО: поиск и программирование
Лицензия: GNU GPL
Веб-сайт xapian.org

Xapian – это библиотека с открытым исходным кодом для полнотекстового поиска. Так же это легко адаптируемый инструментарий, который позволяет разработчикам легко добавлять расширенные средства индексации и поиска в свои приложения. Он имеет встроенную поддержку нескольких семейств весовых моделей, а также поддерживает широкий набор логических операторов запросов.

История

Xapian - это современная библиотека классов, но она имеет более чем 30-летний опыт работы в коммерческих и академических целях. Xapian частично создан на основе движка Open Muscat, разработанного PLC BrightStation и выпущенного под лицензией GPL v2 +. Open Muscat был создан, чтобы заменить запатентованную информационно-поисковую систему Muscat 3.6.

Muscat был первоначально написан доктором Мартином Портером в Кембриджском университете. В 1984 году Мартин и Джон Снайдер основали Cambridge CD Publishing для коммерческого использования этой технологии; вскоре компания была переименована в Muscat Ltd, когда акцент сместился с компакт-дисков на Интернет. Muscat Ltd была куплена Maid PLC, которая сначала переименовала себя в PLC BrightStation.

В начале 2001 года руководство BrightStation переименовало Open Muscat в Omsee, и вскоре после этого они объявили, что берут разработку с закрытым исходным кодом. Ряд разработчиков взяли последнюю версию под лицензией GPL и продолжают разработку под лицензией GPL. Этот проект первоначально был известен как OmSeek, но BrightStation жаловалась, что это было слишком близко к их (без обозначения и непубличной) имени Omsee. Это было проще изменить, чем спорить, и было выбрано имя Xapian.

Установка

Процесс установки предельно прост: нужно установить сам Xapian, привязку к Python и Xappy. В репозиториях большинства дистрибутивов GNU/Linux уже есть все нужные пакеты, например в Ubuntu 10.10 нужно установить пакеты:

$ sudo apt-get install libxapian15 python-xapian python-xappy

Xappy также доступен через easy_install или pip:

$ sudo pip install xappy

Вместе с библиотекой предоставляется несколько маленьких образцов программ, которые используют библиотеку, а также большое приложение, - Omega, - индексатор и CGI-скрипт для вывода результатов поиска.[Источник 1]

Индексатор умеет индексировать документы HTML, PHP, PDF, PostScript, OpenOffice/StarOffice, OpenDocument, Microsoft Word/Excel/PowerPoint/Works, WordPerfect, AbiWord, RTF, DVI, Perl POD, а также простой текст. Научить индексатор поддерживать другие форматы довольно легко при наличии доступного фильтра для преобразования. Этот индексатор работает с локальными файлами, но также имеется скрипт, позволяющий это изменить и создать веб-паука для организации поиска по удаленным сайтам с использованием Omega.


Основные возможности

Основные возможности Xapian:

  • Транзакции
  • Одновременный поиск и обновления
  • Ранжированный поиск — лучшие результаты показываются первыми
  • Поиск фразс
  • Поисковые запросы с использованием метасимволов ("race AND condition NOT horse", "wiki*")[Источник 2]
  • Синонимы
  • Omega - веб приложение для поиска

Пример работы

Для поиска по имеющемуся индексу требуется открыть соединение для поиска по базе поискового индекса:

import xappy
 
# открытие соединения для поиска с базой поискового индекса
# указывается полный или относительный путь к папке
connection = xappy.SearchConnection('/path/to/base')

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

connection.reopen()

Есть несколько методов для выполнения поискового запроса (класс SearchConnection), самым простым является query_parse:

# обычный поисковый запрос
query = connection.query_parse('день')

# нужны лишь первые 10 результатов
# для следующей десятки нужно указать 10, 20 и т.д.
results = connection.search(query, 0, 10)

# что-то нашлось
if results.matches_estimated > 0:
    for results_item in results:
        print(results_item.rank, results_item.id)
else:
    print('Ничего не найдено')

Для полей с типом STORE_CONTENT или INDEX_EXACT можно вывести их содержимое, что позволяет, например, не выбирать из основной базы данных выбранные записи по ID, а обойтись лишь поисковым индексом:

for results_item in results:
    print(results_item.data['title'])

Особенности

Примечательные особенности, которые содержатся в Xapian:

  • Является свободным ПО с открытыми исходными кодами. Лицензируется по GPL.
  • Поддерживает Юникод (включая коды символов, не попадающие в BMP) и хранит проиндексированные данные в UTF-8.
  • Высокая переносимость. Запускается под Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Solaris, HP-UX, Tru64, IRIX и, вероятно, под другими Unix-платформами, а также и в Microsoft Windows.
  • Написан на C++. Обвязки для Perl доступны в модуле Search::Xapian в CPAN. Обвязки для Java JNI включены в модуль xapian-bindings. Кроме того поддерживается SWIG, который может генерировать обвязки для многих языков. В настоящее время это работает для Python, PHP, TCL, C# и Ruby.
  • Ранжированный вероятностный поиск - важные слова получают больший вес, чем неважные слова. Этим достигается то, что более релевантные документы с большей вероятностью попадают в топ поисковой выдачи.
  • Обратная релевантность - для данного документа или нескольких документов Xapian может предложить уточняющие термины для введенного запроса, дополнительные документы на смежные темы, категории документов и т.п.
  • Поиск фраз и "поиск с зазором". Пользователи могут искать точные совпадения фраз или с указанием числа слов, которые могут размежать ключевые слова в заданном порядке или в произвольном порядке.
  • Полный набор операторов для структурированного логического поиска ("ассортимент NOT рынок" и т.п.). Результаты логического поиска ранжируются с помощью вероятностных коэффициентов. Логические фильтры могут применяться также для ограничения вероятностного поиска.
  • Поддержка стемминга(значимая часть для лексического значения) поисковых запросов (например, по запросу "футбол" будут находиться также документы со словами "футбольный" и "футболист"). Это помогает находить релевантные документы, которые иначе были бы опущены. В настоящее время в библиотеку включены стеммеры для следующих языков: английский, венгерский, голландский, датский, испанский, итальянский, немецкий, норвежский, португальский, румынский, русский, турецкий, финский, французский и шведский.
  • Поддерживаются синонимы. Как в явной форме (например, "~деньги"), так и путем автоматического расширения запроса.
  • Xapian может опознавать запросы с орфографическими ошибками и предлагать пользователю исправленные запросы.
  • Поддержка файлов баз данных, превышающих 2GB. Это необходимо для сканирования больших коллекций документов.
  • Независимость от формата даты на используемой платформе. Вы можете создать базу данных на одной машине и искать по ней на другой машине.
  • Позволяет одновременное обновление индекса и поиск по индексу. Новые документы моментально становятся доступными для поиска.

Источники

  1. Использование библиотеки для полнотекстового поиска Xapian в Python // Хабрахабр [2006—2018]. Дата обновления: 13.02.2011. URL: https://habrahabr.ru/post/113657/ (дата обращения: 21.03.2018).
  2. Синтаксис запросов в Xapian. URL: https://xapian.org/docs/queryparser.html (дата обращения: 21.06.2020).