Поиск

Оснастка позволяет осуществлять поиск всех сущностей в системе. В данный момент реализован поиск контрагента, процесса и договора. Для поиска необходимо нажать Enter в поле с параметром поиска или нажать на кнопку ">" (поле Квартира для адресного параметра можно оставить пустым). При поиске по адресу доступен контекстный поиск улиц и домов.

search 1

Ядро предоставляет поиск контрагентов по адресу, наименованию, коду. Для поиска по наименованию необходимо набрать подстроку наименования и нажать Enter или нажать на кнопку ">". Для поиска по коду - ввести точный код контрагента и нажать Enter или нажать на кнопку ">". При поиске контрагента по наименованию возможен дополнительный вывод описывающих его параметров, что задаётся в конфигурации.

search 2

При поиске по адресу осуществляется поиск по всем адресным параметрам контрагентов. В результатах поиска отображается наименование контрагента, наименование параметра и значение. Возможен поиск как только по улице: выбрать улицу в контекстном поиске и нажать Enter или нажать на кнопку ">"; так и по Улице + Дому или Улице + Дому + Квартире - Enter нажимается в последнем заполненном поле.

search 3

Дополнительно может быть настроен полнотекстовый поиск контрагента по различным параметрам.

При полнотекстовом поиске выполняется поиск по текстовому отображению параметров объекта. Например, адреса представляются в виде названия улиц, городов. Списковые параметры - расшифрованные значения. При каждом изменении параметров индекс обновляется и предоставляет выполнять поиск как: "Ленина 5 Иванов".

search 4

В конфигурации ERP добавить:

fulltext:index.delay=<delay>
fulltext:entry.customer.paramIds=<paramIds>
fulltext:entry.process.paramIds=<paramIds>
fulltext:entry.message.paramIds=*

Где:

  • <delay> - задержка в секундах индексации после окончании правки параметров;

  • <paramIds> - коды параметров контрагента, доступные для индексации.

При правильной настройке в оснастке поиска появится ещё один выпадающий пункт Полнотекстовый поиск, см. снимок экрана ранее.

В полнотекстовый индекс помимо параметров для контрагента добавляется его наименование, для процесса - описание. Обрабатываются следующие типы параметров:

  • text, blob - значения;

  • email - значения и комментарии;

  • list, listcount, tree - наименования значений;

  • address - строка с адресом;

  • phone - телефон сплошной строкой цифр.

При правильной настройке в оснастке поиска появится ещё один выпадающий пункт Полнотекстовый поиск, см. снимок экрана ранее.

В планировщике задач добавить запуск класса ru.bgcrm.plugin.fulltext.FullTextUpdater либо выполнять его в период тестирования как динамический класс.

Полнотекстовый поиск Sphinx (устарело)

Данное решение устарело, не будет более развиваться. С момента появления встроенного полнотекстового поиска в MySQL необходимость в стороннем приложении отпала.

При определенном количестве контрагентов стандартная СУБД MySQL не всегда должным образом может справляться с нагрузкой, вызываемой поиском контрагентов, что может приводить к увеличению времени обработки запросов.

Для повышения скорости и разгрузки основной базы при поиске контагента по ФИО, адресу, году рождения и другим параметрам существует возможность интеграции ERP с системой полнотекстового поиска Sphinx. Полнотекстовый поиск подразумевает извлечение текстового представления настроенных параметров и построение единого индекса слов. В результате возможна очень быстрая фильтрация контрагента по нескольким параметрам одновременно, например: Ленина 44 Иванова.

Настройка Sphinx

Из репозиториев необходимо установить дистрибутив Sphinx версии не ниже 2.0.6. В конфигурационном файле, который находится обычно (зависит от дистрибутива) в /etc/sphinx/sphinx.conf описываем конфигурацию:

Конфигурация
#название индекса
index customer
{
# real-time тип индекса
type = rt
# путь хранения
path = /var/local/sphinx/customer
morphology = stem_ru
min_word_len = 1
charset_type = utf-8
enable_star = 1
#min_prefix_len = 2
#min_infix_len = 2
# атрибутиы индекса
# id
rt_field = index
# ФИО или название организации
rt_attr_string = title
# полная строка описание контрагента с параметрами, по которой осуществляется поиск
rt_attr_string = reference
}
searchd
{
# слушаем порт 9306, тип совместимый с mysql
listen = 9306:mysql41
# логи сервера
log = /var/log/sphinx/sphinx.log
# лог запросов
query_log = /var/log/sphinx/query.log
binlog_path = /var/log/sphinx/
pid_file = /var/run/sphinx/sphinx.pid
read_timeout = 5
max_children = 30
# максимальное количество выводимых совпадений
max_matches = 5000
workers = threads
}

Запуск осуществляется стандартным для *nix систем образом:

#/etc/init.d/searchd start

После запуска можно удостовериться, что демон действительно запущен:

# netstat -nlptu
...
tcp 0 0 0.0.0.0:9306:* LISTEN 27095/searchd

Так как тип выбирали совместимый с MySQL, то мы можем подключиться к серверу Sphinx стандартным клиентом для MySQL:

# mysql -h 127.0.0.1 -P 9306

Настройка ERP

Для интеграции со Sphinx в Конфигурации нужно настроить следующие пункты:

# включить поиск в кэше
sphinx.enable=<flag>
# URL/IP на котором находится сервер sphinx
sphinx.url=<url>
# номер порта, прослушиваемый sphinx
sphinx.port=<port>
# максимальное время в секундах, через которое измененный контрагент будет перекэширован
sphinx.cacheTimeout=<seconds>
# максимальное количество контрагентов, которое может быть отправлено в кэш за
один раз
sphinx.cacheLimit=<count>
# список параметров контрагента, по которым ведется поиск в кэше
sphinx.customerParamIds=<paramIds>

Где: - <flag> - 1, если поиск необходимо включить, любое другое значение отключает поиск - <url> - URL, либо IP-адрес хоста, на котором настроен Sphinx - <port> - номер порта сервера Sphinx - <seconds> - максимальное время в секундах, через которое измененный контрагент будет перекэширован - <count> - максимальное количество контрагентов, которое может быть отправлено в кэш за один раз - <paramIds> - id параметров контрагента, указанные через запятую

Пример конфигурации:

sphinx.enable=1
sphinx.url=127.0.0.1
sphinx.port=9306
sphinx.cacheTimeout=300
sphinx.cacheLimit=500
sphinx.customerParamIds=73,12,248

Также необходимо настроить задачу в планировщике, которая периодически отправляет в кэш контрагентов, у которых изменялись параметры:

scheduler.task.<number>.class=<className>
scheduler.task.<number>.minutes=<minutes>

Пример:

scheduler.task.4.class=ru.bgcrm.worker.SphinxCache
scheduler.task.4.minutes=5,10,15,20,25,30,35,40,45,50,55,60

После этого в графическом интерфейсе появится поле, которое использует при поиске кэш:

search 5