Презентация: «Sphinx — полнотекстовый поиск на сайте, просто и доступно»

    Вкратце: хочу сделать презентацию и пару раз выступить на конференциях интернет магазинов. Написал текст презентации, нужны отзывы. Надеюсь на вашу помощь в составлении грамотного и доступного текста.

    Текущий текст презентации под катом

    Общие сведения о полнотекстовом поиске


    Полнотекстовый поиск – это по сути гугл и яндекс технологии: пользователь вводит поисковый запрос – получает ответ в виде определенного набора страниц. На сайте интернет магазина это скорее всего будет список продуктов, наиболее близко подходящих под поисковый запрос. Есть такое понятие – релевантность, так вот, она важна. Также важны: синонимы, опечатки, морфология и обычная логика обычного рядового покупателя.

    В интернет магазине, к примеру, слова «купить», «лучший», «качественный» можно просто игнорировать, так как они ничего не значат. А по словам «модный», «дорогой», «епл айфон», «bosh аккумулятор для киа сид» можно однозначно определить, что именно нужно человеку.
    Вот вкратце о том, для чего нужен полнотекстовый поиск.

    Зачем нужен поиск на сайте: достоинства и недостатки


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

    Кроме того есть специфичная номенклатура, которую простым проходом по каталогу не найти и нужен именно полнотекстовый поиск: это когда более 1000 наименований, или тяжело подобрать именно тот товар, что нужно. В данном случае компьютер упрощает задачу выбора и помогает человеку сделать покупку зряче, а не методом «научного тыка».
    Недостатки: $100-$200 на разработку поискового модуля для сайта.

    Реализации поиска на Сфинкс (SphinxSearch): ОС, варианты установки, языки программирования


    Сфинкс — продукт с открытым исходным кодом. Это фактически поисковый сервер, разработанный с нуля, для высоконагруженных проектов, с настраиваемой релевантностью (имеется в виду качество поиска), а также простотой интеграцией в любой проект. Он написан на C++ и работает на Linux (RedHat, Ubuntu и т.д.), Windows, MacOS, Solaris, FreeBSD и некоторых других менее популярных системах.

    Сфинкс позволяет хранить подготовленные индексы текстовых данных, производить поиск по базе данных SQL, NoSQL хранилища, или просто по файлам на сервере быстро и легко. Он может индексировать данные на лету, добавлять к уже существующим новые индексные данные, работая в режиме онлайн не перегружая сервер.

    Различные возможности обработки текста дают программисту тонкую настройку Sphinx для требований вашего приложения, а также ряд функций, гарантирующих, что вы сможете настроить качество поиска именно так, как вам это нужно. Есть два варианта подключения:
    • Поиск по SphinxAPI — обычный АПИ
    • SphinxQL — аналог стандартного SQL
    Сфинкс кластера могут масштабироваться до миллиардов документов и десятки миллионов поисковых запросов в день. Такого рода нагрузки выдерживаются на сайтах, как Craigslist, DailyMotion, Netlog, и т.д.

    Реальный пример поисковых запросов в интернет магазине автозапчастей


    Авто запчастями, а точнее продажей интернет магазинов по запчастям, наша компания занимается давно, плодотворно и довольно успешно. Но в силу ряда причин релевантный поиск понадобился только сейчас.

    Основная причина, скорее всего в том, что большинству запчастей полнотекстовый поиск не подходит. Но есть 5-10% товаров, для которых он катастрофически нужен и без него уж никак. А наш стандартный поиск с прямыми по своей сути кросс связями и указанием четкой модели и марки авто из каталога запчастей, для этой группы товаров не работает. Пример таких «неправильных» товаров: масла, шины, аккумуляторы, автолампы, дворники и другие подобные часто продаваемые продукты.

    Средний прайс по запчастям небольшой рядовой компании — 2-10 млн позиций, соответственно 10% от этой базы и будут занимать нужные нам данные. Поэтому мы решили внедрить движок sphinxsearch.com в своем продукте. Подробнее о данной реализации можно почитать на Хабре: habrahabr.ru/blogs/sphinx/132118

    Углубленное изучение поискового языка запросов


    Основной функционал поиска – это настраиваемые веса для полей, а также методы поиска. Для того, чтобы работала морфология и в запросе «масла Castrol 5W40» нашлись документы с текстом «Масло» и «15W40» — нужно одновременно использовать символ "*" и поиск по словоформе «масл», а для этого нужен построитель запросов, который работает именно в режиме «SPH_MATCH_EXTENDED2».

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

    Ну и самое важное: синонимы. В нашем примере можно использовать запрос «масла кастрол 5W40» и он найдет то же, что и «масла Castrol 5W40». В примере с «C#» нужно включать такие нестандартные словоформы, чтобы они не обрабатывались по стандартной схеме индекса и работали вручную именно так, как вы их настроите. Только вы знаете, какой именно смысл в вашем проекте несет фраза, к примеру «C#» = «ДО ДИЕЗ для музыкантов».

    Кто сможет сделать такой поиск на базе сфинкс?


    Любой джуниор программист, знакомый с английским языком и умеющий читать документацию на сайте sphinxsearch.com/docs

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

    Спасибо, буду рад ответить на возникшие вопросы

    * Оплаченная спонсором рекламная ссылка: разработка интернет магазина tecdoc+sphinxsearch

    * Ссылка на готовую презентацию для конференции: http://www.mstarproject.com/temp/4/presentation_sphinx_revision3.ppt

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 12

      +1
      Конструктивная и не очень критика — приветствуется очень. Надеюсь на помощь ИТ сообщества!
        +1
        Sphinx бесспорно выглядит многообещающе, но если попользоваться поиском на хабре, то он себя полностью дискредитирует. Я сейчас прямо пример не приведу, но уверен, что поиск по словам содержащимся в статье даст не совсем ожидаемые результаты, если %username% попробует. Скажем так, гуглопоиском по забру пользоваться эффективнее.

        В связи с этим вопрос — это дело в настройках или просто все печально?
          0
          Это все дело в настройках. У гуггл конечно все намного круче чем на хабре.
          0
          Сфинкс подойдет в качестве поискового движка по обширной базе документов различного формата: pdf, txt и т.д.? Или есть более удобоваримые решения на рынке?
            +1
            Подойдет, по-моему лучшего решения и не придумаешь.
              0
              тут скорее лучше solr подойдёт, т.к.:
              > Rich Document Parsing and Indexing (PDF, Word, HTML, etc) using Apache Tika
              lucene.apache.org/solr/features.html
                0
                Sphinx не умеет разбирать pdf, txt и т.д. Решение будет написать парсер и скормить через xmlpipe.
                +1
                Имеется таблица в MySQL c кучей полей, по одному из них требуется производить полнотекстовый поиск в лоб типа WHERE forsearch LIKE '%keyword%'. И forsearch, и keyword представляют собой мешанину из цифр и букв без пробелов и прочего логического деления Ускорит ли использование Sphinx работу или в таком простейшем случае нет смысла?
                  0
                  Надо тестить: при разном кол-ве данных и разных запросах. так в лоб и не ответишь.
                    +2
                    Проверил, на синтетическом тесте выигрыш в 70 раз. Неожиданно; не думал, что Sphinx так круто ускорит выборку.
                      0
                      А то!
                  0
                  Надо тестить: при разном кол-ве данных и разных запросах. так в лоб и не ответишь.

                  Only users with full accounts can post comments. Log in, please.