Кто такая Мантикора?

07.03.24

Задачи пользователя - Поиск данных

Статья об опыте развертывания и интеграции с базой данных Manticore Search для быстрого полнотекстового поиска.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Demo
.zip 37,35Mb
6
6 Скачать (1 SM) Купить за 1 850 руб.

Всем привет

Всем привет. Так уж получилось, что в 2023 году мне снова удалось поработать с технологиями о которых в мире 1С, в частности на инфостарте, совсем нет информации. Поэтому хочу немного рассказать о своем опыте работы с Manticore Search.

 

Проблема

Проблема возникла при работе над проектом разработки бэкенда для мобильного приложения. Очень коротко о цели проекта: необходимо разработать конфигурацию, которая будет иметь в себе легковесные копии необходимых объектов основной конфигурации (Управление торговлей 11.x) и предоставлять HTTP API для работы мобильных клиентов.

Поступила задача создать метод для реализации подсказки ввода в поисковой строке. Суть следующая: при вводе текста в строку поиска (это может быть слово, или фраза), мобильный клиент отправляет запрос к бэкенду с содержанием поисковой строки и получает в ответ список первых N подходящих результатов.

Задача, на первый взгляд, звучит просто, но есть несколько нюансов, которые все усложняют:

  1. Поиск должен осуществляться по нескольким полям (наименование, код, артикул и т.д.)
  2. Фраза может быть в любой части искомых полей. Например, в результат поиска по фразе "Корм для кошек" должна попасть позиция с именем "Сухой корм Pro Plan Sterilised для стерилизованных кошек и котов, с кроликом, 10 кг"
  3. Ответ от сервера должен быть максимально быстрый. Приемлемое время формирования сообщения, без учета транспорта, должно быть не более 100 мс. Это необходимо для обеспечения комфортной работы мобильного клиента.

Вариант решения с помощью конструкции ПОДОБНО + % сразу отбросим, так как этот вариант далеко не самый быстрый да и куча проблем с многословными фразами. Поэтому, для решения этой проблемы, нужна система полнотекстового поиска, желательно с HTTP API для удобной и простой интеграции с 1С.

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

 

Elasticsearch

Очень известный Open Source продукт. Большой, мощный, нафиг не нужный. Сложная настройка, тянет за собой в нагрузку много других, не нужных для меня инструментов. Для каких-то больших проектов, возможно, лучшее решение, но в моей ситуации - это, скорее, лишняя трата времени.

 

Sphinx 3.x

3-я итерация поискового движка Sphinx. На официальном сайте утверждается, что он является Open Source Search Server, но ссылки на GitHub я не нашел. Есть открытая версия Sphinx 2.x, но этот проект не поддерживается с 2018 года, поэтому рассматривать его не вижу смысла.

Из плюсов:

  • довольно легковесное решение
  • на вид достаточно просто настраивается
  • есть документация с примерами

Изначально я рассматривал именно это решение, пока не наткнулся на Manticore Search.

 

Manticore Search

Open Source продукт (есть ссылка на GitHub). По сути своей является форком от Sphinx 2.x который пошел по своей дороге.

Плюсы такие же как и у Sphinx 3.x, только есть исходный код в свободном доступе.

Трудно сказать, что именно повлияло на мой выбор в пользу именно этого инструмента. Скорее внешний вид главной страницы продукта и его документация (чем то напомнили мне стиль продуктов Grafana, к которым я испытываю теплые чувства, см. Как я мониторинг разворачивал). Ну и, возможно, несколько прочтенных статей на хабре. Например Manticore — альтернатива Эластику на C++ с 21-летней историей и Андрей Карпов считает, что код проекта Manticore качественнее, чем код проекта Sphinx.

 

Как это работает

Я разворачивал Manticore Search с помощью docker compose. Это, по моему мнению, самый простой и быстрой способ. Вообще Manticore Search имеет кучу способов установки для любой ОС. Все варианты можно найти тут.

Мой docker-compose.yml такой же как в официальной документации с незначительными отличиями в разделе портов. Порт интерфейса MySQL 9306 мне не нужен, поэтому я его убрал.

 
 docker-compose.yml

Дальнейшая работа с Manticore Search проходит следующим образом (всё взаимодействие можно осуществлять через HTTP API):

  1. Создать таблицу с описанием полей для полнотекстового индекса.
  2. Заполнить таблицу "документами" и обновлять/удалять их по мере изменения данных.
  3. Выполнять запросы поиска по правилам, описанным в документации.

 

Интеграция с 1С

В архиве, приложенном к статье, реализована демо интеграция с простым примером использования. Для разработки использовалась свежая платформа 8.3.23

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

Подсистема Manticore состоит из следующих элементов:

 

Настройка осуществляется заполнением константы АдресСервераManticore и включением константы ИспользоватьManticore.

Регистр сведений СоответствиеИдентификаторовManticore служит для хранения соответствия идентификаторов, возвращаемых Manticore, с ссылками объектов 1С указанных в составе типов определяемого типа ОбъектManticore.

Регистр сведений ОчередьОтправкиManticore служит для добавления объектов 1С указанных в составе типов определяемого типа ОбъектManticore в очередь для дальнейшей отправки в Manticore.

Подписка на событие ДобавитьВОчередьОтправкиManticore добавляет объекты 1С указанные в составе типов определяемого типа ОбъектManticoreОбъект в регистр сведений ОчередьОтправкиManticore.

Регламентное задание ОтправкаОбъектовВManticore выполняет две задачи:

  1. Создает таблицы по настройкам, определенным в общем модуле ManticoreПереопределяемый.
  2. Получает объекты 1С из регистра сведений ОчередьОтправкиManticore. Преобразовывает их в "документы Manticore" и создает или обновляет добавляя при этом связи в регистр сведений СоответствиеИдентификаторовManticore.

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

  1. Добавить ссылочный тип  в состав типов определяемого типа ОбъектManticore.
  2. Добавить объектный тип объекта в состав типов определяемого типа ОбъектManticoreОбъект.
  3. В процедуре ПриОпределенииНастроекИнтеграцииManticore(НастройкиИнтеграцииManticore) общего модуля ManticoreПереопределяемый добавить элемент настройки для объекта метаданных.

 

Выполнение поиска осуществляется вызовом функции Manticore.Поиск(ОбъектМетаданных, СтрокаПоиска, Лимит, Смещение)

 

Так же при встраивании подсистемы не забудьте добавить ее объекты в базовые права. Или создайте необходимые роли удовлетворяющие требованиям вашей системы.

 

Демонстрация работы

Пример работы обработчика авто подбора из демо.

 

Итог

На изучение документации и реализации первой рабочей версии интеграции с 1С я потратил около 4-х дней. Поэтому считаю, что Manticore Search отличная система полнотекстового поиска с относительно низким порогом вхождения и возможностью быстрой развертки и интеграции.

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

 

P.S.

Я специально не затрагивал все возможности использования Manticore Search. Так как в ней имеется куча инструментов и настроек для описания которых не хватит формата статьи. Все эти возможности можно изучить в официальной документации.

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

manticore manticoresearch мантикора поиск поиск данных

См. также

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13501    13    48    

25

Поиск данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработки помогут Вам легко и, главное, быстро (в 5 раз и быстрее штатной обработки 1С), выполнить поиск дублирующих данных в Ваших базах 1С на платформах 8.1-8.3. Это позволит уменьшить объем лишней информации в справочниках и документах, планах видов характеристик и др., упростит работу с данными пользователям. А так же можно, одним нажатием, узнать в каких ссылочных объектах есть вообще дубли! Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. А так же обновления Вы получаете бесплатно в течение года с момента приобретения данных обработок! (Обновление от 27.11.2023, версия 6.12)

10800 руб.

14.05.2012    158462    338    253    

570

Розничная торговля WEB-интеграция Поиск данных Пользователь Платформа 1С v8.3 Оперативный учет 1С:Розница 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Альтернатива сервису 1С Номенклатура, не требует подписки ИТС, ищет данные в открытых источниках. Для поиска товара по штрихкоду в сети интернет, полезно для первоначального заполнения базы.

1999 руб.

15.10.2020    18883    23    63    

24

Математика и алгоритмы Инструментарий разработчика Универсальные функции Поиск данных Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Абонемент ($m)

Несколько упакованных в один класс интерфейсов для обработки популярных универсальных коллекций. Для тех, кого раздражает отсутствие действительно единого интерфейса для универсальных коллекций.

5 стартмани

25.09.2024    1748    0    Артано    14    

17

Поиск данных Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

18.08.2024    1529    1cnik2    23    

14

Поиск данных Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Отображение и просмотр реквизитов справочника или документа - с бесконечным открытием подуровней.

2 стартмани

14.06.2024    3229    7    RustIG    26    

22

Поиск данных Корректировка данных Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Абонемент ($m)

PowerOffice - обработка для поиска, просмотра и обработки данных для пользователей. Доступ к объектам на просмотр и редактирование данных определяется правами пользователя.

1 стартмани

05.06.2023    2264    25    PowerBoy    1    

16

Поиск данных Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Получение ссылки в 1С по бинарной строке из PostgreSQL в виде строки формата bytea или из MSSQL в виде шестнадцатиричной строки. Кроме ссылочных объектов ссылки могут быть получены и для перечислений. Это может быть полезно при анализе логов журнала регистрации или СУБД.

1 стартмани

04.04.2023    3028    2    berserg    2    

12
Отзывы
12. dammit666 16 01.12.23 07:42 Сейчас в теме
(11) Можно запомнить коды:
Alt+38="&"
Alt+60="<"
Alt+62=">"
и так далее
aleksey2; popov2000; andreysidor4uk; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. JohnyDeath 302 30.11.23 10:55 Сейчас в теме
Интересно.
Под капотом, на сколько я понял, MySql и его полнотекстовый поиск "MATCH".
Не смотрели в сторону sqlite и его реализации полнотекстового поиска
Пример: https://blog-programmista.ru/post/45-polnotekstovyj-poisk-v-sqlite.html
Саму базу sqlite можно держать в одном файлике и подрубать с помощью ВК от Александра Орефкова

Мне просто интересны результаты на одинаковых данных. Если они примерно равны, то, думаю, можно будет посмотреть и в сторону более легковесного решения.
prior; andreysidor4uk; +2 Ответить
2. andreysidor4uk 216 30.11.23 11:22 Сейчас в теме
(1) Увы не смотрел и даже не знал =) Если бы наткнулся, то возможно бы рассмотрел предложенный вами вариант.

Но в общем и целом сама Мантикора довольно лёгкая и не требует много ресурсов, плюс довольна проста в освоении, имеет удобное API и ряд дополнительных приятных функций для хорошего поиска. Например подключение морфологических словарей, леммизаторов и т.д.
5. JohnyDeath 302 30.11.23 17:48 Сейчас в теме
(2) смастерил обработку, которая выполняет нечеткий поиск по номенклатуре через v8sqlite.
Будет интересно посмотреть на результаты сравнения с вашими данными. У меня просто и номенклатуры не много и зверя из топика не стоит.
В самой обработке нужно:
1. выбрать каталог, где будет создан файл БД sqlite
2. Нажать "Подключить" (подключение ВК и подключение к БД)
3. Нажать "Заполнить". При этом БД sqlite заполняется данными наименования и кода из справочника "Номенклатуры"
4. Пробовать нечеткий поиск в реквизите "Строка поиска". Поиск начинает срабатывать только после ввода 3-го символа.

Ранее заполненную БД sqlite повторно можно не заполнять, а просто подключаться и работать.
В обработке специально всё сделано "на клиенте"
Прикрепленные файлы:
sqlite_fts.epf
prior; mrChOP93; mszsuz; +3 Ответить
7. andreysidor4uk 216 30.11.23 20:41 Сейчас в теме
(5) Спасибо =) Сделал пару быстрых тестов с замерами:
Тест на демо базе, где около 500-та позиций показал, что интеграция с Manticore возвращает список первых 10ти элементов(уже преобразованных в 1Совские ссылки) за 10-14 мс. Sqlite за 1-3 мс.
На другой базе, где 64к позиций, интеграция с Manticore так же возвращает результат за 10-14 мс., а Sqlite уже за 9-12 мс.
Можно сделать вывод, что с ростом количества данных скорость будет падать. Плюс в обработке Sqlite прямые запросы сразу в нужную таблицу, без "интеграционных навесок", а они, думаю, добавят еще 2-3 мс. к результату.
Ну и Manticore, на первый взгляд, лучше ранжирует результаты запроса, но это на первый взгляд.
prior; mrChOP93; comptr; JohnyDeath; +4 Ответить
13. gaglo 06.12.23 10:09 Сейчас в теме
(2)
подключение морфологических словарей,

А есть ли морфология русского языка, готовая к подключению?
А вы ее попробовали?
Если я, конечно, правильно понял этот термин.
ИМХО, с включенной морфологией запрос "сухие корма" должен Возвратить результаты типа "сухой корм для котов и бабочек".
andreysidor4uk; +1 Ответить
14. andreysidor4uk 216 06.12.23 10:47 Сейчас в теме
(13) Да, из коробки есть словари для русского и многих других языков. Ссылка на доку
У меня подключены типовые русские словари, но их работу не проверял.
Сделал сейчас быстрый тест. С окончаниями работает хорошо, но Ваш пример не прошел, возможно требуется дополнительная настройка. Уверен, что этот вопрос можно решить.
У меня еще стоит задача сделать, что бы корректно работало с ошибками в словах, например запрос по слову "лапатка" должен содержать в себе позиции с именем "лопатка". Мантикора поддерживает такую функциональность, но для этого надо приложить некоторые усилия. Полагаю, что вместе с этой задачей решу и проблему с морфологией. Но это задача не приоритетная. Поэтому решу вопрос, скорее всего, уже в начале следующего года. Постараюсь отписаться по этому поводу.
prior; gaglo; +2 Ответить
3. SerVer1C 794 30.11.23 13:23 Сейчас в теме
(1) SQLite больше подходит именно для хранения и редкой выборки данных. Мне кажется, он не выдержит множество запросов одновременно.
andreysidor4uk; +1 Ответить
4. JohnyDeath 302 30.11.23 13:37 Сейчас в теме
(3) SQLite как раз-таки создавался для частой и быстрой выборки (есть, кстати, опция создания БД в памяти).
А вот для частой вставки он не годится. Но в данной задаче, насколько я её понял, нужно много и часто читать и редко вставлять.
andreysidor4uk; +1 Ответить
10. ningauble 01.12.23 03:12 Сейчас в теме
(1) Под капотом там оригинальный поисковый полнотекстовый движок, написанный Андреем Аксёновым в проекте sphinx. Мантикора развивает эти идеи.
Но при этом, что сфинкс, что мантикора умеют работать по протоколу mysql, т.е. можно прицепиться стандартным клиентом и общаться с движком в формате sql, вплоть до обновления rt-индексов.
tulakin_s; JohnyDeath; +2 Ответить
6. unichkin 1578 30.11.23 20:41 Сейчас в теме
Общие модули начинать с латиницы - такое себе.. Зачем заставлять коллег ломать пальцы.
Опечатка в СоответствиеИдентификторовManticore
mrChOP93; JohnyDeath; andreysidor4uk; +3 Ответить
8. andreysidor4uk 216 30.11.23 20:48 Сейчас в теме
(6) С опечаткой спасибо)
По поводу латиницы - момент спорный. Я думаю пальцы 1Сника привыкли к таким историям вводя, например '&' или '<' или '>'.
9. unichkin 1578 01.12.23 00:24 Сейчас в теме
(8) да уж, и зачем себе люди раскладки ставят с вводом этих символов, непонятно, они же "привыкли"..
Могу сказать как человек который работает без приспособ позволяющих вводить спец. символы без переключения - это всегда неудобно.. И привыкнуть к такому нельзя.
Рекомендую от всей души заводить русский контекстный префикс в подобных случаях, и не мучить ни себя, ни того кто потом будет с этим работать.
Вижу по структуре, что поход библиотечный, и уже только это вызывает одобрение. Но мой посыл - раз уж делаете хорошо - делайте до конца.
Всем добра)
mrChOP93; Serg2000mr; andreysidor4uk; +3 Ответить
11. andreysidor4uk 216 01.12.23 07:17 Сейчас в теме
(9) Спасибо, ваш посыл мне очень даже понятен. Я руководствовался простой логикой, что если инструмент в оригинале называется Manticore, то и модули и все где он упоминается должно так называться. =))
Я сам тоже не пользуюсь "приспособами" для ввода этих символов, есть лишь пара автозамен, с которыми это логично выглядит (например БЮ -> <>). Я просто смирился с тем фактом, что нужно постоянно переключать раскладку для ввода спец. символов.
12. dammit666 16 01.12.23 07:42 Сейчас в теме
(11) Можно запомнить коды:
Alt+38="&"
Alt+60="<"
Alt+62=">"
и так далее
aleksey2; popov2000; andreysidor4uk; +3 Ответить
15. dimaster 40 22.03.24 10:23 Сейчас в теме
можно ли реализовать поиск по такой схеме (по артикулам аналогов):
аналоги в тч либо регистр сведений либо иная реализация

- товар1; артикул1
-- товар2Аналог1; артикул2
-- товар3Аналог2; артикул3

причем артикулы могут быть вообще разные, близко не похожие

пользователь начинает вбивать артикул, ему подбираются товары по похожим артикулам + аналоги этих товаров
16. andreysidor4uk 216 26.03.24 10:27 Сейчас в теме
(15) Не могу дать однозначный ответ. Но вообще система поиска довольно мощная, есть много фич для хитрого поиска, по этому я думаю, что вашу задачу решить возможно.
17. svbel85 59 11.06.24 18:08 Сейчас в теме
Жалко что 1с при поиске, в найденных значениях не подсвечиваются те слова которые мы ищем.
18. andreysidor4uk 216 19.06.24 18:16 Сейчас в теме
(17) Вообще есть опция, которая будет возвращать вам форматированный текст из мантикоры. Называется это highlight, кажется. То есть мантикора вернет строку с идентификатором и highlight вида "<b>Корм<\b> Wiskas <b>для кошек<\b> 1 кг со вкусом кролика" в ответ за запрос "Корм для кошек". Можно спарсить это форматирование и превратить в форматированную строку 1С и тогда будет подсветка слов. =)
Оставьте свое сообщение