Добрый день, подскажите почему падает докер контейнер с глобальным поиском? Делал по инструкции, версия 3.0 https://academy.terrasoft.ua/docs/user/razvertyvanie_onsite/nastrojka_k…
Ошибка на шаге 3 "Перейдите в папку с компонентами /opt/compose/elasticsearch и выполните команду": docker-compose up -d

Прикрепленные файлы

Нравится

2 комментария
Лучший ответ

Добрый день!

Согласно скриншоту, ваш контейнер в состоянии “Exited (1)”

1) посмотрите логи контейнера;

 

2) Exit Code 1: указывает на сбой из-за ошибки приложения.

Обычно, указывает, что контейнер остановился либо из-за ошибки приложения, либо из-за неправильной ссылки в Dockerfile на файл, которого нет в контейнере.

Про этот код ошибки, можно прочитать в открытых источниках: https://betterprogramming.pub/understanding-docker-container-exit-codes…

 

3) docker-compose --verbose up - эта команда покажет вам логи установки контейнеров и вы сможете увидеть все этапы установки. 

Добрый день!

Согласно скриншоту, ваш контейнер в состоянии “Exited (1)”

1) посмотрите логи контейнера;

 

2) Exit Code 1: указывает на сбой из-за ошибки приложения.

Обычно, указывает, что контейнер остановился либо из-за ошибки приложения, либо из-за неправильной ссылки в Dockerfile на файл, которого нет в контейнере.

Про этот код ошибки, можно прочитать в открытых источниках: https://betterprogramming.pub/understanding-docker-container-exit-codes…

 

3) docker-compose --verbose up - эта команда покажет вам логи установки контейнеров и вы сможете увидеть все этапы установки. 

Жмурко Сергей,

спасибо в моем случае выдал Exit Code 1, а в логах удалось найти что на сервере не хватает 2Гб оперативной памяти

Показать все комментарии

Добрый день. 
Глобальный поиск и дедубликация ранее корректно работал на версии 2.0, после перевода его на 3.0, стал странно работать.
В системе есть раздел Purchase в нем порядка 25 млн записей. 
Глобальный поиск его судя по всему не проиндексировал, поиск по нему не происходит, хотя я принудительно пытаюсь его проиндексировать через 
/indexation/SiteName/Purchase/reindex/full мне в ответе приходит ОК, но ничего не происходит. 
 После запуска дедубликации по этому разделу она в базе mongo сразу стает завершенной без ошибок, а в интерфейсе остается на 0%. 
 По базовому разделу контакты дедубликация проходит тоже частично успешно, находит не все дубли. В mongo пишет, что обработано меньше записей, чем должно.

В mongo залазил согласно https://community.terrasoft.ua/articles/kak-proverit-nalichie-zapuschen…

 Ошибок по логам контейнеров не нашел. Подскажите может, кто-то сталкивался с такой проблемой, возможно есть дополнительные настройки?  Спасибо.

Нравится

2 комментария

Добрый день, Владимир!

 

Возможно, очередь не долшла к записям из этого раздела.

Полная переидексация для БД только в разделе Purchase может проходить достаточно долго.

Можно посмотреть значения колонки LastIndexeOn для раздела Purchase в таблице IndexingEntity в базе глобального поиска Postgres. Когда индексация дойдет к этому разделу значения из этой колонки начнет расти и можно будет поискать записи после завершения индексации раздела.

 

Как узнать завершилась ли индексация глобального поиска в on-site?

 

В БД глобального поиска, есть таблица IndexingEntity, которая отвечает за настройки индексации для каждой отдельной сущности, например Контакт, Средства связи контакта и т.д.

В ней есть 2 колонки, которые важны для понимания завершилась ли первичная индексация или нет:

  • LastIndexedOn - дата последней итерации индексации.

  • InProcess - в процессе ли индексация (одной итерации) по текущей сущности.

Индексация завершилась для конкретной сущности, лишь тогда, когда LastIndexedOn = дата подключения сайта к ГП и в InProcess установлено значение “false“.

Полностью индексация завершена, когда для всех записей из таблицы "IndexingEntity" значения в LastIndexedOn и InProcess установлены аналогично описанию выше.

Порядок настройки

  1. Зайти в контейнер с БД глобального поиска.

     

    docker exec -it gs-postgres bash

  2. Подключиться к БД глобального поиска.

     

    psql -d postgres -U postgres

  3. Выбрать, все записи из таблицы IndexingEntity.

     

    SELECT "EntityName", "LastIndexedOn", "InProcess" FROM "IndexingEntity";

 

P.S. Планировщик (который ответственный за первичную индексацию) запускается раз в 50 дней, таким образом доиндексирует\актуализирует необходимое.

То есть, это к тому, что каждые 50 дней эта дата будет обновляться.

Жмурко Сергей,

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

Показать все комментарии
При запросе http://[ GS-WEB-API ]:81/sites/[ SITE_NAME ]/search/state Получаю ошибку:
"Failed to check state for the 'NAME_BASE' site: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 25 - Connection string is not valid)"],"info":[]},"code":200,"status":"ok","message":null}
Перепроверил строку конфига эластика, настройки сетевого и локального Firewall. Куда копать, подскажите?

Нравится

7 комментариев

Игорь, добрый день! 

Вам необходимо указать точные значения для GS-WEB-API и SITE_NAME, например:

http://192.168.1.1:81/sites/my-test-site

Мы рекомендуем указывать ip-адрес вместо доменного имени. Также необходимо убедиться, что Ваша база данных доступна с устройства, на котором проводится тестирование и порт 81 не блокируется.
Проверьте статус работы БД. Можете перезапустить базу данных в случае, если произошёл отказ в работе с её стороны.

Lev Kuptsov пишет:
http://192.168.1.1:81/sites/my-test-site

Указаны  в запросе были реальные данные, осознано заменил в целях безопасности при размещении заявки.  База данных пингуется с сервера GS-WEB-API. Замечено, что на сетевом Firewall нет запросов от GS-WEB-API в сторону БД при запросе ..../state. Хотя все запущенные контейнеры находятся со статусом Up.

Есть ли отличия в настройках Docker 2.0.2 и 2.0.4? Была сделана переустановка. До этого на 2.0.2 поиск работал.

Такая же проблема, саппорт пока помочь не может. Поиск сдох на версии 2.0.2.  Установил 2.0.4, но проблема осталась.  

Игорь Г., 

Вместо fqdn имени сервера необходимо использовать ip адрес.

Причем если тестировать коннект до БД утилитой sqlcmd (https://hub.docker.com/_/microsoft-mssql-tools) - то коннект успешно проходит.

Бакалов Павел Вячеславович,

Все верно, только IP и прописывал.

Бакалов Павел Вячеславович,

Я проблему решил. Насколько я понял от своих программистов, проблема в том, что в 

docker 2.0.2 в конфиге параметр image: postgres, по нему скачивается latest, там сейчас 14 версия, а должна быть 11. 
postgres работает, а контейнер gs-web-api не может подключиться к бд и падает.

 

Показать все комментарии

Добрый день!

Дошел до индексирования поиска, все настроил по инструкции, поиск работает (прокрутка поиска идет), а вот результат не выводит

В инструкции есть "Как запустить переиндексацию сайта?"

Но я не знаю, куда и как вводить это PUT запрос, в какую консоль, на какой машине..., помогите знатоки

Нравится

6 комментариев

Максим, добрый день!

Нет необходимости запускать полную переиндексацию сразу после подключения поиска. Все записи должны самостоятельно переиндексироваться после перезапуска с очисткой Redis.
Чтобы не перезагружать приложение и не чистить Redis, можете  просто в консоле браузера выполнить скрипт

require(["ServiceHelper"], (ServiceHelper) => {
    ServiceHelper.callService("IndexingConfigService", "SendIndexationConfigs");
});

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

Спасибо! По пробую! А все таки как PUT запрос запустить?

Я что-то не так сделал?

Максим,

 

Вы перепутали консоль браузера с консолью SQL.

Скрипт нужно выполнить в консоли браузера.

Открыть консоль браузера можно, нажав на клавишу F12.

Максим,

Запрос PUT выполнять в графичном интерфейсе сервиса поиска.
Необходимо в браузере перейти на http://адрес-сервера/api/index.html, где [адрес-сервера] - это адрес сервера, где запущены сервисы Глобального поиска.

Понял, запустил, все работает! Спасибо!

Показать все комментарии
Здравствуйте, настраиваю глобальный поиск, хочу удалить индексы:
http://айпи:81/sites/sales/search
Пробовал вот так:
curl -XDELETE http://айпи:81/sites/sales/search-*/
Но потом при curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://айпи:81/sites/sales/search
Как правильно удалить ранее созданные индексы?
Выдает ошибку:
{"code":500,"status":"error","message":"System.Exception: Could not check index 'uoospgg4cm6abfpjuotlbfcrco0pq5esrxuexjqw6vndxtx4gvnpjtljeneotytt' exists. ---> System.Exception: Invalid NEST response built from a unsuccessful low level call on HEAD: /uoospgg4cm6abfpjuotlbfcrco0pq5esrxuexjqw6vndxtx4gvnpjtljeneotytt\n# Audit trail of this API call:\n - [1] BadRequest: Node: http://elasticsearch-public-ip:9200/ Took: 00:00:10.0127688\n# OriginalException: System.Net.Http.HttpRequestException: Resource temporarily unavailable ---> System.Net.Sockets.SocketException: Resource temporarily unavailable\n   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)\n   --- End of inner exception stack trace ---\n   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)\n   at System.Threading.Tasks.ValueTask`1.get_Result()\n   at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n   at System.Threading.Tasks.ValueTask`1.get_Result()\n   at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)\n   at System.Threading.Tasks.ValueTask`1.get_Result()\n   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)\n   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n   at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)\n   at Elasticsearch.Net.HttpConnection.Request[TReturn](RequestData requestData) in C:\\Users\\russc\\source\\git\\elasticsearch-net-5.x\\src\\Elasticsearch.Net\\Connection\\HttpConnection-CoreFx.cs:line 78\n# Request:\r\n<Request stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.>\n# Response:\r\n<Response stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on ConnectionSettings to force it to be set on the response.>\n\n   --- End of inner exception stack trace ---\n   at GlobalSearch.WebApp.Services.SearchManagement.SearchService.CheckIndexExist(String indexName) in /src/Src/GlobalSearch.WebApp/Services/SearchManagement/SearchService.cs:line 95\n   at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.SearchManagement.DeleteSearchRequestHandler.DeleteSearchBySite(Site site) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/SearchManagement/DeleteSearchRequestHandler.cs:line 44\n   at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.SearchManagement.DeleteSearchRequestHandler.InternalHandle(DeleteSearchRequest request) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/SearchManagement/DeleteSearchRequestHandler.cs:line 70\n   at GlobalSearch.WebApp.ServiceModel.Requests.Handlers.BaseRequestHandler`1.Handle(TRequest request) in /src/Src/GlobalSearch.WebApp/ServiceModel/Requests.Handlers/BaseRequestHandler.cs:line 38"}

Нравится

1 комментарий

Евгений, добрый день! 

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

Invalid NEST response built from a unsuccessful low level call on HEAD

Попробуйте поискать информацию по данному фрагменту.

Показать все комментарии
Добрый день, выполнял настройку elasticsearch по инструкции, linux+docker. Версия Creatio 7.17.1.1364 (.NET Core 3.1.15). Компоненты на машинах запустились без ошибок, дошел до момента когда нужно выполнить sql  скрипт. Для этого в Creatio добавил плагин SQL консоли, он там 1. Вот первый скрипт который запускаю:
БД Postgres
DO $$

DECLARE 
    GlobalSearchFeature VARCHAR(50) := 'GlobalSearch';
    GlobalSearchFeatureId uuid;
    GlobalSearchV2Feature VARCHAR(50) := 'GlobalSearch_V2';
    GlobalSearchV2FeatureId uuid;
    GS_RelatedEntityIndexingFeature VARCHAR(50) :=   'GlobalSearchRelatedEntityIndexing';
    GS_RelatedEntityIndexingFeatureId uuid;
    allEmployeesId uuid := 'A29A3BA5-4B0D-DE11-9A51-005056C00008';

BEGIN

   SELECT "Id" INTO GlobalSearchFeatureId FROM "Feature"
   WHERE "Code" = GlobalSearchFeature
   LIMIT 1;
   IF (GlobalSearchFeatureId IS NOT NULL)
      THEN
          IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchFeatureId) THEN
             UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchFeatureId;
          ELSE
              INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
          END IF;
   ELSE
       GlobalSearchFeatureId := uuid_generate_v4();
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchFeatureId, GlobalSearchFeature, GlobalSearchFeature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
   END IF;

   SELECT "Id" INTO GlobalSearchV2FeatureId FROM "Feature"
   WHERE "Code" = GlobalSearchV2Feature
   LIMIT 1;
   IF (GlobalSearchV2FeatureId IS NOT NULL)
    THEN
        IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchV2FeatureId) THEN
            UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchV2FeatureId;
        ELSE
           INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
        END IF;
   ELSE
       GlobalSearchV2FeatureId := uuid_generate_v4();
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchV2FeatureId, GlobalSearchV2Feature, GlobalSearchV2Feature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
   END IF;

  SELECT "Id" INTO GS_RelatedEntityIndexingFeatureId FROM "Feature" WHERE "Code" =GS_RelatedEntityIndexingFeature LIMIT 1;
  IF (GS_RelatedEntityIndexingFeatureId IS NOT NULL)
  THEN
  IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = Bulk_ES_DD_FeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GS_RelatedEntityIndexingFeatureId;
  ELSE
  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
  END IF;
  ELSE
  GS_RelatedEntityIndexingFeatureId := uuid_generate_v4();
  INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GS_RelatedEntityIndexingFeatureId, GS_RelatedEntityIndexingFeature, GS_RelatedEntityIndexingFeature);
  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
  END IF;
END $$;

Этот скрипт падает с ошибкой(но таймер у скрипта все таки стартует)
Вот второй скрипт:
Данные нужные подставил
 
UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к индексу ElasticSearch, строка следующего типа: http://external.elasticsearch:9200/indexname]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl' LIMIT 1 );

UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к Global Search Service, строка следующего типа: http://SERVER2_IP_ADDRESS:81]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchConfigServiceUrl' LIMIT 1 );

UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к Global Search Indexing Service, строка, сл. типа - http://SERVER2_IP_ADDRESS:82]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl' LIMIT 1 );

Окей, раз скрипты не работают я пошел на:
 

/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage
Без /0/ потому что Linux.
Там нашел один единственный тумблер с надписью GlobalSearch, вот его и включил и сохранил, все ок.
Вопрос в следующем, как мне убедится что Глобальный поиск работает? И нужны ли все таки выполненные эти скрипты?
Если скрипты нужно выполнять, то где? в Postgres(на Linux)? или как это работает?

Нравится

9 комментариев

Здравствуйте, скрипты необходимо запускать для корректного включения функциональности. Подскажите, какие ошибки возникают при выполнении скриптов?
Скрипты необходимо выполнять на базе данных приложения Creatio.

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

Алёна Доля, здравствуйте, встретился с ошибкой с ссылкой на отсутствие переменных в psql, GlobalSearchUrl, GlobalSearchConfigServiceURL, GlobalSearchIndexingApiUrl
если есть пример того как должно выглядеть буду благодарен

Алёна Доля,

ещё вопрос не по теме  БД, на сервере с компонентами elasticsearch заметил что не дописал порт в команду curl, вопрос, как теперь удалить старую запись? Потому что сейчас не дает записать ничего из-за того что ранее уже записывал

Евгений Шевченко,
Для более быстрой настройки можете заполнить настройки GobalSearchUrl, GlobalSearchConfigServiceURL, GlobalSearchIndexingApiUrl  через интерфейс в разделе  "Системные настройки". Необходимые записи фильтруйте в разделе по коду.

ОШИБКА:  "globalsearchfeatureid" - не известная переменная
СТРОКА 14:    SELECT "Id" INTO GlobalSearchFeatureId FROM "Feature"

не подскажете в чем причина?

Добрый день!

Проблема заключалась в функционале страницы https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/razvertyvanie_onsite/nastrojka_kontejnernyh_komponentov/nastroit_globalnyy_poisk
В ближайшее время мы исправим этот функционал в статье.

Воспроизводится проблема в результате использования кнопки Копировать код (скриншот во вложении).
Если копировать сам текст запроса, ошибка перестанет воспроизводиться.

Жмурко Сергей,

Всё ещё не поправлено :)

Андрей,

Добрый день! Проблема зарегистрирована для исправления в будущих версиях Creatio.

Показать все комментарии

Добрый день, коллеги!

 

Возникла проблема, когда мы добавляем новые продажи, лиды, контрагентов и контактов, то при поиске мы их не может найти. Уже и очищали Redis, перезапускали весь CRM, но результаты так найти и не получилось.

 

Может кто-то может подсказать, как решить эту проблему? Заранее спасибо.

Нравится

4 комментария

Поиск ищет хоть что-то или только новые не находит?

Если приложение on-site, то нужно смотреть настройки эластика (если он вообще настроен).

https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/ra…

https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/ra…

Трефилов Павел Сергеевич,

Эластик установлен и вроде как настроен, поиск находит данные, которым уже минимум полгода, а те, которые были добавлены в прошлом месяце, или буквально недавно - нет. 

Добрый день. Возможно, проблема с настройкой доступа. Если зайти под системным администратором, также не находит записи?

Здравствуйте, судя по описанию у Вас на сайте не включилась мгновенная индексация новых записей по шедулеру.
Проверьте корректность заполнения системной настройки GlobalSearchIndexingApiUrl.
Для оперативного решения вопроса на период диагностики настроек проведите полную индексацию данных в системе.
Для версии глобального поиска 2.0:
Выполните PUT запрос вида :http://[ GS-WEB-API ]:81/indexation/{siteName}/reindex/full
Детальнее описано в статье:https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/ra…

Показать все комментарии

Доброго дня, коллеги!

 

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

 

Заранее спасибо!

Нравится

1 комментарий
Лучший ответ

Михаил, насколько понимаю, сейчас такое нельзя:

Пользовательскими средствами можно включать и отключать поиск для конкретных разделов. По умолчанию индексируются только разделы вне зависимости от их автора и текстовые, а также справочные колонки, кроме ряда исключений.

Но уже зарегистрирована идея расширения поиска на детали. Там же предлагают обходное решение: при помощи БП копировать значения поля всех записей с детали в специально созданное поле в объекте раздела и искать по нему.

Михаил, насколько понимаю, сейчас такое нельзя:

Пользовательскими средствами можно включать и отключать поиск для конкретных разделов. По умолчанию индексируются только разделы вне зависимости от их автора и текстовые, а также справочные колонки, кроме ряда исключений.

Но уже зарегистрирована идея расширения поиска на детали. Там же предлагают обходное решение: при помощи БП копировать значения поля всех записей с детали в специально созданное поле в объекте раздела и искать по нему.

Показать все комментарии

Добрый день. Вопрос не по решению проблемы а о том - как узнать что глобальный поиск подключен и работает корректно?

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

Нравится

10 комментариев
Лучший ответ

В поддержке должна быть 2.0.2, если не новее.

Очистить редис и перезапустить сайт пробовали? У меня версия 1.7 заработала только после этих манипуляций.

Здравствуйте, Александр!

 

Если предложение Алексея не поможет, первое, что можно проверить, это доступность эластика из сервера, где развернут глобальный поиск (ГП). Это можно сделать следующим образом:

1. Зайти на сервер, где развернут ГП.
2. Зайти внутрь любого контейнера ГП, например gs-web-api. Для этого необходимо выполнить команду
docker exec -it gs-web-api bash
3. Оправить запрос на эластик
curl -v http://{elastic}:9200
где {elastic} надо заменить на ip_адрес сервера, где развернут эластик
Результат выполнения последней команды покажет, есть доступ (вернет ответ 200 ОК) или нет (будет ошибка)
Если же есть ошибка, то возможно, нет доступа с сервиса, где развернут ГА на сервис, где развернут эластик, или например закрыт порт 9200 на сервере, где развернут эластик. Подобные проблемы устраняются администраторами на стороне клиента.

 

Также нужно проверить правильность значения системных настроек: “GlobalSearchUrl”, “GlobalSearchConfigServiceURL” и “GlobalSearchIndexingApiUrl”.

 

 А также проверить, включены ли фичи  'GlobalSearch', 'GlobalSearch_V2' и 'GlobalSearchRelatedEntityIndexing' у текущего пользователя , это можно узнать запросами:

 

select * from feature where code = 'GlobalSearch' or code = 'GlobalSearch_V2' or code = 'GlobalSearchRelatedEntityIndexing'
 
select * from AdminUnitFeatureState where Featureid in (select id from feature where code = 'GlobalSearch' or code = 'GlobalSearch_V2' or code = 'GlobalSearchRelatedEntityIndexing')

Ещё дело может быть в более старой версии самого поиска, сейчас последняя 2.0.2, может помочь обновление на неё.

Мотков Илья,

Выполнил запрос из контейнера

root@714fe8324321:/app# curl -v http://172.28.116.165:9200
* Rebuilt URL to: http://172.28.116.165:9200/
*   Trying 172.28.116.165...
* TCP_NODELAY set
* Connected to 172.28.116.165 (172.28.116.165) port 9200 (#0)
&gt; GET / HTTP/1.1
&gt; Host: 172.28.116.165:9200
&gt; User-Agent: curl/7.52.1
&gt; Accept: */*
&gt;
&lt; HTTP/1.1 200 OK
&lt; content-type: application/json; charset=UTF-8
&lt; content-length: 327
&lt;
{
  "name" : "bxNTqjU",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hhGU9yAwR0iD4gCb5CrKrw",
  "version" : {
    "number" : "5.6.9",
    "build_hash" : "877a590",
    "build_date" : "2018-04-12T16:25:14.838Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}
* Curl_http_done: called premature == 0
* Connection #0 to host 172.28.116.165 left intact

Показывает 200, значит ОК.

 

select * from "AdminUnitFeatureState" where "FeatureId" in (select "Id" from "Feature" where "Code" = 'GlobalSearch' or "Code" = 'GlobalSearch_V2' or "Code" = 'GlobalSearchRelatedEntityIndexing')

Выдает что все "FeatureState" стоит "1". "GlobalSearch_V2" и "GlobalSearch" привязаны к "All employees" а "GlobalSearchRelatedEntityIndexing" к "Supervisor"

 

select * from "Feature" where "Code" = 'GlobalSearch' or "Code" = 'GlobalSearch_V2' or "Code" = 'GlobalSearchRelatedEntityIndexing'

Выводит все три "GlobalSearch_V2", "GlobalSearch" и "GlobalSearchRelatedEntityIndexing"

Алексей Следь,

Не помогло

Здравствуйте, Александр!

В таком случае попробуйте последнюю рекомендацию, обновление самого поиска.

Мотков Илья,

А где его взять? На сайте академии только 2.0 там и скачал на прошлой недели

В поддержке должна быть 2.0.2, если не новее.

Мотков Илья,

Если версия на сайте академии была не рабочей и не протестированной то зачем бы ее там выкладывали и так долго не заменяли на более новую?

Александр, если дело не в версии, то, вероятно, при установке что-то не так настроили.

Мотков Илья,

Спасибо, дело было в версии. Версия 2.0.0 не работала, поставил 2.0.2 и все работает теперь

Показать все комментарии

Всем привет!

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

Заранее спасибо за ответы.

Нравится

2 комментария
Лучший ответ

Поставьте точку останова в методе getFilters в схеме BaseDataView, увидите колстек выполнения, как идет фильтрация.
Лучше будет наверное, для частых поисков например по Email, добавить новое поле в секцию раздела. Затем вы можете получить значение этого поля и в переопределенном методе getFilters нужного вам раздела, дополнять фильтры как вам нужно. При наличии например "@" в введенном значении делаете например такой фильтр:
 

 getFilters: function() {
	var filterGroup = this.callParent(arguments);
	filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
	var emailFilter = //получаем введенное значение в новое поле;
	if (emailFilter &amp;&amp; emailFilter.includes("@")) {//либо сразу делать маску почты и проверку по маске
		filterGroup.add("EmailFilter", this.Terrasoft.createColumnFilterWithParameter(
			this.Terrasoft.ComparisonType.CONTAIN, "[ContactCommunication:Contact].Number".substring(), emailFilter));
	}
	return filterGroup;
},

 

Поставьте точку останова в методе getFilters в схеме BaseDataView, увидите колстек выполнения, как идет фильтрация.
Лучше будет наверное, для частых поисков например по Email, добавить новое поле в секцию раздела. Затем вы можете получить значение этого поля и в переопределенном методе getFilters нужного вам раздела, дополнять фильтры как вам нужно. При наличии например "@" в введенном значении делаете например такой фильтр:
 

 getFilters: function() {
	var filterGroup = this.callParent(arguments);
	filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
	var emailFilter = //получаем введенное значение в новое поле;
	if (emailFilter &amp;&amp; emailFilter.includes("@")) {//либо сразу делать маску почты и проверку по маске
		filterGroup.add("EmailFilter", this.Terrasoft.createColumnFilterWithParameter(
			this.Terrasoft.ComparisonType.CONTAIN, "[ContactCommunication:Contact].Number".substring(), emailFilter));
	}
	return filterGroup;
},

 

Показать все комментарии