Меню

Битрикс настройка поиска sphinx

Настройка поиска Sphinx для интернет-магазина

Информации по Sphinx не так много, как хотелось бы. Лишняя статья не помешает.
Первые шаги в освоении Sphinx мне помогли сделать статьи Создание ознакомительного поискового движка на Sphinx + php и Пример Sphinx поиска на реальном проекте — магазин автозапчастей Tecdoc Советую начать с них.

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

Раздел source и дополнительная сортировка

Выдача сначала должна содержать позиции в наличии, потом временно отсутствующие, потом архивные. И все эти три группы должны быть отсортированы по релевантности. Для этого надо задать атрибуты. В моем случае это поля clearance и in_stock раздела source sphinx.conf

Эти поля будут использованы в формировании выдачи в PHP. Опишу ниже.

Раздел index в sphinx.conf

morphology = stem_enru
Морфология решает мою первою задачу. Поиск ‘подшипники’, ‘подшипника’, ‘подшипников’ приведет к единому результату.

Стэммы (stem_enru) быстрее, леммы (lemmatize_ru) точнее. Я пробовал только стэммы. Выбор повлияет на ваш словарь замен wordforms. Захотите поменять — придется переписывать.

min_word_len = 1
Индексируем слова любой длины.

html_strip = 1
Удаляем html тэги

min_infix_len = 1
Поиск будет по фрагменту слова. Проиндексируем фрагменты вплоть до 1 буквы. Так как база у меня менее 10000 наименований, то на индексе не экономлю.

expand_keywords = 1
Автоматически приводит запрос к виду «( running | running | =running )». min_infix_len и expand_keywords приведут, к тому что запрос RV 2205 выдаст RV2205. Кстати, тире – это разделитель эквивалентный пробелу. Так что RV-2205 то же выдаст RV2205.

charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+0435, U+451->U+0435
Приводим латиницу и кириллицу в нижний регистр. Ё заменяем на е.

blend_chars = +, &, U+2C, U+2E
У меня много нецелых чисел. Их надо индексировать полностью. U+2C и U+2E это точка и запятая. Например, 1.25 будет индексирован как ‘1.25’, ‘1’ и ’25’.

regexp_filter = (\d+)\,(\d+) => \1.\2
Десятичные знаки в числах могут быть разделены точками и запятыми: «1,75», «1.75». Приведем все к точке

Синонимы и опечатки

Единицы измерения можно писать по русски или английски: мм-mm, мАч-mAh, мВт-mW. Добавляем в словарь синонимов, путь к которому указан в wordforms: «мач > mah». Язык для индекса выбираю по собственным предпочтениям.

Читайте также:  Настройка биоса для установки windows 7 с флешки на нетбук

указывает применять замену после обработчика морфологии. Это позволяет не писать все словоформы и вместо правил для ‘корка’, ‘корку’, ‘корки’ написать «

Мой список полностью:

Прилипание букв к цифрам

Иногда числа это часть названия (например LCD5208D), но чаще характеристика (100mAh, 10x15x4мм). Отделяем все числа от букв и индексируем.

Это решит несколько задач:

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

Уберем икс, хэ и звезду в размерах типа 10х15х4 M3x10:

Отбросим «мм», так как они часто не указаны в названии товара.
Сделаем файл stop.txt и пропишем его в stopwords.
Содержимое:

Теперь немного про PHP

Sphinxapi рано или поздно будет depricated. Будем использовать Sphinxql. Для этого надо подключиться к БД. В моем случае Sphinx подключаемого через хостинг это выглядит так:

А все общение со Spinxql это один SELECT передающий отфильтрованный текст запроса

SphinxQL не понимает выражения в разделе сортировки ORDER BY, поэтому WEIGHT() и in_stock>0 пришлось поместить в поля. Кстати, LIMIT по умолчанию всего 20.

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

Через field_weights задаем какие поля будут обладать большим весом.

Выполнив запрос, мы получим отсортированный массив id. Но, к сожалению, отбор данных через WHERE id IN() эту сортировку нарушит. Придется формировать свой запрос для каждого id.

На этапе отладки сильно помогает запрос «SHOW META» сразу после запроса SELECT. Особенно для проверки словаря wordforms и регулярных выражений фильтров. Можно увидеть перечень ключевых слов, на которые разложился запрос.

Источник

Установка и настройка Sphinx

Относительно недавно, мне было нужно настроить sphinxsearch для одного проекта на Bitrix.

Поэтому в этой статье я поделюсь с вами информацией как просто это сделать.

И так, Sphinx (англ. SQL Phrase Index) — система полнотекстового поиска, разработанная Андреем Аксёновым и распространяемая по лицензии GNU GPL.

Отличительной особенностью является высокая скорость индексации и поиска, а также интеграция с существующими СУБД (MySQL, PostgreSQL) и API для распространённых языков веб-программирования (официально поддерживаются PHP, Python, Java; существуют реализованные сообществом API для Perl, Ruby,.NET[1] и C++). Так что интегрировать эту систему реально и достаточно просто.

Читайте также:  Как отвязать гугл аккаунт после сброса настроек

Рассмотрим основные плюсы Sphinx перед обычными (встроенными) системами поиска:

Поддержка ODBC совместимых баз данных (MS SQL, Oracle и т. д.).

Впечатляет? Вот небольшой список тех кто использует Sphinx:

Перейдем к установке.

Все операции проводились на Ubuntu 14.04 LTS, но инструкция должна подойти и для более свежих версий.

Добавляем репозиторий со свежим sphinx

Далее обновляем пакеты и устанавливаем сам Sphinx

Теперь создадим конфиг Sphinx c именем sphinx.conf в каталоге /etc/sphinxsearch/

Вот пример конфига Sphinx:

Рассмотрим секции конфига по порядку:

Давайте разберем из каких секций может состоять конфиг Sphinx

Дополнительно рассмотрим таблицу атрибутов, которые можно использовать в Sphinx.

Makes Matches Query Sortable Groupable Filterable Retreivable
first column Document ID YES [1] YES ALWAYS
(no definition) FIELD YES [2]
sql_attr_uint ATTRIBUTE YES YES YES YES
sql_attr_bool ATTRIBUTE YES YES YES YES
sql_attr_bigint ATTRIBUTE YES YES YES YES
sql_attr_timestamp ATTRIBUTE YES YES YES YES
sql_attr_str2ordinal ATTRIBUTE YES YES [3] [3]
sql_attr_float ATTRIBUTE YES YES YES YES
sql_attr_multi ATTRIBUTE YES YES YES YES
sql_attr_string ATTRIBUTE YES YES YES
sql_attr_str2wordcount ATTRIBUTE YES [3] YES YES
sql_field_string ATTRIBUTE + FIELD YES YES YES [2] YES
sql_field_str2wordcount ATTRIBUTE + FIELD YES YES [3] YES YES
sql_joined_field FIELD YES

Источник

Sphinx. Установка и настройка.

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

Установка и настройка Sphinx на Linux

Чтобы установить Sphinx на сервер Ubuntu, введите:

Поисковая система Sphinx успешно установлена на сервер. После установки Sphinx нуждается в дополнительной настройке.

Настройка Sphinx

Конфигурации Sphinx должны храниться в файле sphinx.conf в каталоге /etc/sphinxsearch. Они состоят из трёх основных блоков: index, searchd и source. Описание каждого из них и общий вид конфигурационного файла можно найти ниже.

Для начала создайте конфигурационный файл:

Блок source

Блок source содержит описание источника данных для нашего индекса, параметров доступа к ним, атрибутов и правил их анализа.. Первый столбец sql_query должен содержать уникальный ID. Запрос SQL будет выполняться для каждого индекса, а затем передавать данные в индексный файл Sphinx.

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

Что еще интересного из настроек:

Блок index

Блок index содержит настройки построения индекса с использованием источника.

Описание настроек:

Блок indexer

Блок indexer содержит настройки индексатора

Блок searchd

Блок searchd содержит порты и переменные для запуска демона Sphinx.

Настройки демона обычно всегда стандартные, указываем адрес, порт демона и пути к логам

Описание настроек:

Запускаем sphinx

После того как мы создали файл конфигурации sphinx.conf, нам надо проиндексировать данные из нашей БД. Для этого в консоли запускаем индексатор:

В случае успешного индексирования получим примерно вот такие строки:

Ошибок нет, все работает.

Запускаем поискового демона:

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

Коннектимся к демону по SQL протоколу что бы проверить его работоспособность:

Теперь можно использовать консольный mysql клиент. Полное описание протокола SQL, реализованного в SphinxQL читайте по ссылке http://sphinxsearch.com/docs/current.html#sphinxql-reference

Запускаем переиндексацию по крону

Добавляем в системный планировщик заданий (крон, crontab) запуск индексатора через каждые сутки:

Защита служебных портов

После настройки и запуска поискового сервера Sphinx важно помнить что его демн открывает порты 9312, 9306 (указанные в настройках) и делает их доступными на всех интерфейсах. Настоятельно рекомендую закрыть их от внешнего мира при помощи файрвола на внешнем интерфейсе (интернет). Вот два простых правила для IPTABLES:

Скрипт автозапуска searchd для init.d

Теперь нужно сделать так чтобы демон searchd стартовал при загрузке/перезагрузке операционной системы. Ниже приведен пример создания и настройки скрипта для Debian/Ubuntu GNU/Linux без использования systemd.

Откроем для редактирования новый скрипт инициализации в папке «/etc/init.d» и добавим туда следующие строчки:

Установим права на скрипт запуска и зарегистрируем его в автозапуске:

Для надежности можете перезагрузить свой сервер и проверить запустился ли демон searchd:

Источник