Pull to refresh

Comments 19

А есть ли какие-либо замеры производительности на разных размерах базы (100, 100 тыщ, 100 тыщ мильёнов документов)?
К сожалению не нашел, постараюсь провести собственное исследование
В сравнении производительности Xapian, Sphinx и Lucence написано про реальное использование Xapian на объемах 1.5Тб, и миллионах документов.
Я когда-то бенчил Xapian. Цифр нет, помню ряд занятных фактов. Disclaimer: это было минима год назад, ситуация могла измениться.

1. Первые 10 документов в порядке тн. релевантности (vanilla BM25) выдавались дико быстро. Видимо, для каждого слова хранится топ-N документов в порядке убывания частоты. Значение N выяснять не стал.

2. Число матчей при этом втупую врало, сильно. Вместо точного числа оно при таком поиске делает оценку, оценка получается слишком грубая.

3. Поиск фразы из двух слов резко исправляет ситуацию, все очень медленно.

4. Допсортировка по атрибутам либо отсутствует, либо опять все очень медленно.

По результатам этих простейших тестов плотнее мерить и глубже рыть не стал, тк. порядок скорости был сразу не тот. За исключением ровно одного юзкейса «дай топ-10 документов по bm25, соври в разы про количество совпадений».
UFO just landed and posted this here
Хм, уже про него в черновках пишу, выложу чуть позже как прикручивать к C#. C тестами производительности на 700.000 индексированных документах.
К сожалению, как правило, поиск Google «site:example.com keyword» дает заметно более релевантные результаты, чем любой встроенный поисковый движок.

Но одно из важных применений «доморощенных» поисковиков — это параметрический поиск («хочу нечто белое, гладкое, не больше 55 см в ширину, искать только в данной категории»).
Очень интересно, годится ли Xapian для этого?
Не соглашусь. Проиндексировать сайт с закрытым контентом не получится. Да и в случае «доморощенного» поисковика всё управление настройками релевантности в ваших руках.

У Xapian есть поддержка фасеточного поиска, который, я думаю, можно адаптировать под подобные запросы
Fulltext search используется далеко не только в поиске по сайту. Например, чтобы заменить 50-60 строчные sql-запросы сложные для переваривания sql-сервером.
Также не забывайте, что область применения не ограничивается лишь веб-приложениями. Например Xapian используется в aptitude — оболочке для системы управления пакетами в debian-based дистрибутивах GNU/Linux
Я бы с вами согласился раньше. Но у меня возникли обстоятельства в которых поиск через google по сайту давал ужасные результаты. Дело в том, что на большинстве страниц моего сайта есть блоки с ссылками на другие статьи на нем же. При поиске через google больше всего попадались те страницы на которых на момент индексации поисковиком стоит ссылка на нужную страницу, а не сама страница, которую ищет посетитель. Положение спас sphinx, который индексировал только текст материала, без служебных и интерфейсных блоков.
Это случайно не та либа, которая использует лайт для базы и не может рабоать в тредах?
Я вот одного не понял. Вы предлагаете использовать Xapian потому что «библиотека требует установки, иногда даже запуска демона (например Sphinx), что может быть неприемлемо». Но при этом сами ставите библиотеку, даже несколько разных. Если уж есть sudo, то тут никаких проблем хоть со сфинксом, хоть с чем.
Как встраиваемое решение по-моему гораздо интереснее что-то типа Zend_Search_Lucene (для python тоже вроде был аналог). Использовал его на практике, не очень шустро, но для тех сайтов что держат на shared-хостинге достаточно. Единственное, в ZF нет в комплекте русского стеммера, но это не проблема.
Читайте внимательнее, я писал что это как раз является недостатком большинства подобных решений.

Насколько я помню, у Zend_Search_Lucene нет стемминга. Для Python есть нечто подобное — Whoosh. Не спорю, для некоторых конфигураций это может быть лучший вариант
Извините, значит я вас не так понял. Вот эта фраза «Решений существует масса, у каждого есть свои достоинства и недостатки. Я бы хотел подробнее остановиться на относительно малоизвестной библиотеке Xapian.» в моем понимании предполагает что вы решаете перечисленные выше проблемы.

Стемминга стандартно в Zend_Search_Lucene нет, но приделывается он туда очень быстро. если надо могу дать адаптированный под стиль зенд стеммер портера (snowball).
Конечно, скиньте ссылку в комментах, наверняка кому-то пригодится. Спасибо!
Выложил сам код стеммера на pastebin pastebin.com/53pw9Hy0
А чтобы подключить нужно сделать примерно так:
    $analyzer = new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive();
    $analyzer->addFilter(new Application_Search_Stemmer_Russian());
    Zend_Search_Lucene_Analysis_Analyzer::setDefault($analyzer);


* This source code was highlighted with Source Code Highlighter.
Благодарю за подробный разбор. Попробую присобачить к проекту на flask.
Sign up to leave a comment.

Articles