Добрый день. Развернули в Docker сервис глобального поиска согласно инструкции https://academy.creatio.com/docs/8.x/setup-and-administration/on-site-deployment/containerized-components/global-search#title-254-33 

 

Подключили сайт 8010.salesup-it.com - работает.

При попытке настоить аналогичным способом сайт driveforce.salesup-it.com ошибка:

Изображение удалено.

сайт зарегестрирован в elasticsearch 

Изображение удалено.

но проверка статуса выдает ошибку

Изображение удалено.

 

В процессе настройки сайт driveforce.salesup-it.com регистрировался (команды curl -v -X POST -d '{"databaseType": "[DATABASE_TYPE]", "databaseConnectionString": "[DATABASE_CONNECTION_STRING]"}' -H "Content-Type: application/json"  http://10.10.20.26:81/sites/driveforce.salesup-it.com и curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://10.10.20.26:81/sites/driveforce.salesup-it.com/search) в elasticsearch, удалялся (команда curl -v -X DELETE http://10.10.20.26:81/sites/driveforce.salesup-it.com) и снова добавлялся. Судя по ошибке я понял, что остался след от предыдущей регистрации и надо удалить item с таким же ключем, подскажите где и как это сделать?

Нравится

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

Добрый день!

 

Судя по описанной проблеме, возможно, Вы пропустили использование параметра "DELETE​/sites​/{siteName}​/search". Ниже я опишу пошаговую последовательность передобавления сайта и шаблона через Swagger.  

 

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

  1. Зайти по адресу: [адрес_сервера_ГП]:81/api/index.html

  2. Выбрать параметр "DELETE​/sites​/{siteName}​/search"

 

- Нажать "Try iy out".

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

3. Выбрать параметр "DELETE​/sites​/{siteName}"

 

 

- Нажать "Try iy out".

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

 

***

4. Создаем новый сайт. Для этого используем параметр "POST​/sites​/{siteName}"

- Нажимаем "Try iy out".

- Необходимо ввести название нового сайта (Это может быть любой текст).

- Необходимо в теле запроса указать тип СУБД и строку подключения к БД сайта.

 

5. Указываем для сайта шаблон. Для этого используем параметр "POST​/sites​/{siteName}".

- Нажать "Try iy out".

- Необходимо ввести название сайта, который создали на прошлом шаге.

- В теле запроса нужно удалить все параметры, кроме templateName (Пример добавления дефолтного шаблона, все шаблоны описаны в статье).

 

6. В системной настройке "GlobalSearchUrl" необходимо указать значение, которое вернет предыдущий запрос.

7. Перезапуск приложения и чистка редиса.

8. Чтобы запустить вручную переиндексацию, можно выполнить запрос в консоль браузера:

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

Zhmurko Sergii,

Добрый день, спасибо за ответ.

Увы, рекомендация не помогла. После удаления сайта "DELETE​/sites​/{siteName}​/search", "DELETE​/sites​/{siteName}​" и добавления заново ошибка прежняя.

Возможно надо удалять что-то в базе сайта? Попробовал переименовать сайт (изменил только bind, connection string остался прежним) и зарегистрировал под другим именем (было: driveforce, стало: drive-force) но все та же ошибка: 

Решено: Оказалоcь, что в базе сайта задублировались значения "GlobalSearchUrl", "GlobalSearchConfigServiceUrl" и "GlobalSearchIndexingApiUrl".

Запрос для PostgreSQL:

 

--посмотреть записи с кодом GlobalSearchUrl

SELECT *

FROM "SysSettingsValue"

WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl' LIMIT 1);

 

--удалить строку используя id

DELETE FROM "SysSettingsValue"

WHERE "Id" = 'уникальный_Id_дублирующейся_строки';

 

повторить для "GlobalSearchConfigServiceUrl" и "GlobalSearchIndexingApiUrl" по аналогии с "GlobalSearchUrl".

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

Настроен глобальный поиск 3.0.5. Создание сайта и поиска . Не работает. Ошибок на эластике и компонентах нет. 

 

Но в логах пишет:

2022-10-12 17:54:50,644 [94] ERROR IIS APPPOOL\creatio_01 OnError - Indexing request failed.

System.ArgumentException: SendIndexingRequest failed. IndexingApiUrl is incorect!

   at Terrasoft.GlobalSearch.Indexing.IndexingWebRequestFactory.CheckRequestData(IndexingRequestData message)

   at Terrasoft.GlobalSearch.Indexing.IndexingWebRequestFactory.CreateIndexingRequest(IndexingRequestData indexingRequestData)

   at Terrasoft.GlobalSearch.Indexing.IndexingActor.SendIndexingRequest(IndexingRequestData message)

   at Terrasoft.GlobalSearch.Indexing.IndexingActor.<.ctor>b__3_0(IndexingRequestData message)

 

С app-сервера телнетом на 81,82,83 и на эластик заходит.  

Нравится

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

Здравствуйте,

 

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

 

С уважением,

Мирослава

Mira Dmitruk,

Из странного, в  инструкции:

 

et the values of the system settings:

 

“GlobalSearchUrl:” the full path to ElasticSearch, including the index. The web-api returns this value if you request it to add site search.

 

Example string for Docker: http://[SERVER2_IP_ADDRESS]:83/indexname.

 

Example string for Kubernetes: http://[GS-SEARCH-SERVICE_URL]/indexname.

 

Если вызвать в браузере, то:

 

http://[SERVER2_IP_ADDRESS]:83/indexname - говорит - 404

http://[SERVER1_IP_ADDRESS]:9200 /indexname - возвращает ответ. 

 

У нас на Docker развернуто.

Если указать в GlobalSearchUrl - for Kubernetes: http://[SERVER1_IP_ADDRESS]:9200 /indexname. то ошибка пропадает. Но поиск не работает

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

Добрый день, подскажите почему падает докер контейнер с глобальным поиском? Делал по инструкции, версия 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Гб оперативной памяти

Показать все комментарии
Добрый день, выполнял настройку 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.

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

Коли робити операцію

curl -v -X POST -d '{"templateName": "[ TEMPLATE_NAME ]"}' -H "Content-Type: application/json" http://[ gs-web-api ]:81/sites/[ SITE_NAME ]/search

виникає помилка. Як її пофіксати?

Изображение удалено.

Нравится

3 комментария
[ TEMPLATE_NAME ] [ gs-web-api ] [ SITE_NAME ] это перменные которые надо заменить на ваши
реальный запрос должен быть к примеру  curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://183.73.75.5:81/sites/creatiotest7161/search

Полозюков Евгений Петрович,

Вмене з реальними змінними, робиться все  локально на віртуальній машині

curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://localhost:81/sites/ter3a/search

 

Та сама помилка виникає коли роблю видалення темплейта через цю саму лінку але з параметром DELETE.

Михайло,

Значит где-то в предыдущих пунктах настройка выполнена неправильно.

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

Настроил конфиг файлы Service, Scheduler, Worker.

 

При попытке AddSite получаю ошибку веб приложения Service. не подключилось подключиться к базе SQLLite.

Где настройка этой базы идет? 

 

 

Нравится

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

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

1. Web.config. То, что красным - закомментить, зеленым - раскомментить.

2. ConnectionStrings.config​ <add name="ConnectionDb" connectionString="ПОЛНЫЙ ПУТЬ к БИНАРЯМ\GlobalSearch.db"/>

В IIS нажать browse и бд GlobalSearch​ будет создана автоматом.

 

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

Добрый день! Необходимо добавить доп колонку с определенными условиями в результаты глобального поиска. Добавили в датасет mds_GlobalSearchResult доп поле и в окно wnd_GlobalSearchResults доп колонку, подаскажите, пожалуйста, где нужно прописать код для отображения после поиска нужных нам данных в этой колонки?

Нравится

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

Данные с результатами поиска в колонки датасета добавляются в функции AppendResultString скрипта scr_GlobalSearch. Она вызывается для каждого результата в функции DoSearch.

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

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

А где в датасете ResultDataset, который используется функцией AppendResultString, можно создать параметр, по которому будет производиться поиск?

Это датасет для уже найденных результатов, параметры поиска передаются в других функциях того же скрипта, которые вызываются раньше из функции DoSearch и вызывающей её StartSearch. См. InitializeSearchSettings, AddFiltersBySearchWordsArray и др. функции в скрипте scr_GlobalSearch.

Хорошо, тогда такой пример: где прописано условие, что поле FieldValue получает значение в зависимости от поля "тип объекта" SubjectType, по которому был найден результат? В одном случае в FieldValue - это название контрагента, а в другом - название проекта.

Таблицы, по полям которых ищется, задаются в BuildSearchFieldsData. Там заполняется объект GlobalSearch.SearchedWorkspaces.

Рекомендую настроить отладчик и пошагово пройти весь процесс поиска, чтобы понять, откуда что берётся.

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