Добрый день!
Нам необходимо использовать elasticsearch, чтобы обеспечить глобальный поиск. Но при реализации мы столкнулись с двумя проблемами, при передаче данных для индексации в elastic строка ограничивается 500 символами, т.е. если в базе длина строки больше, то elastic может забрать и проиндексировать только первые 500 символов. Мы предположили, что можно было бы разбивать длинное значение по 500 символов и сохранять в детали объекта, но по деталям информация не ищется вовсе.
Есть ли кто-нибудь, кто сталкивался с подобными ограничениями и как удалось решить проблему?
Заранее благодарю за любой совет!
Нравится
Добрый день!
В базовой логике приложения по умолчанию индексируются только разделы (независимо от их создателя) и только текстовые и справочные колонки кроме ряда исключений которые указаны в системной настройке "GlobalSearchIndexedDataConfig".
На текущий момент нет возможности добавить в индексацию сущности, которые не являются разделами, так как в логике выборки сущностей для индексации строгая завязка на принадлежность к разделу.
Именно по этому записи в деталях не индексируются глобальным поиском.
Что касается ограничения в 500 символов.
Тут все верно поиск в системе можно провести только по первым 500 символам текстового поля неограниченной длины. Это сделано в целях предотвратить случаи, большой нагрузке на elastic при поиске и индексации записей.
Но вы можете изменить это увеличив максимальную длину для индексации записей.
Для этого необходимо в деплойментах worker-single и worker в самом кубере добавить настройку (по аналогии с RequestTimeOut):
- name: IndexingContentLength
value: '999999'
Это можно сделать так же в и хелм пакете для этих же деплойментов. В папке templates найти папки worker-single и worker и в файлах deployment.yaml добавить строки (по аналогии с RequestTimeOut):
- name: IndexingContentLength
value: "{{ .Values.global.indexingContentLength | int64 }}"
Если будете менять через helm, то нужно еще в файле values-onsite.yaml в секцию global добавить свойство (или заменить значение в values.yaml):
indexingContentLength: 999999
и после внесения правок в helm обновить сервис.
Также, хочу обратить внимание, что чем больше данных будет индексироваться в приложении тем будет больше нагрузка на сервера.
Чтобы увеличить быстродействие системы и снизить нагрузку на сервера, вы можете явно указать те колонки, которые не должны индексироваться для глобального поиска.
Например, колонки, которые содержат служебную информацию.
Сделать это можно с помощью редактирования значений в системной настройки "GlobalSearchIndexedDataConfig".
Более детально об этом Вы можете ознакомиться на Академии по ссылке:
https://academy.terrasoft.ua/docs/8-0/user/razvertyvanie_onsite/nastroj…
С уважением,
Катя
Kate Karpik пишет:
На текущий момент нет возможности добавить в индексацию сущности, которые не являются разделами, так как в логике выборки сущностей для индексации строгая завязка на принадлежность к разделу. Именно по этому записи в деталях не индексируются глобальным поиском.
А есть планы сделать это и для деталей? Или важные для поиска детали необходимо в таком случае создавать как разделы?