Indexing Service
[Indexing Service is no longer supported as of Windows XP and is unavailable for use as of Windows 8. Instead, use Windows Search for client side search and Microsoft Search Server Express for server side search.]
Purpose
Indexing Service is a base service that extracts content from files and constructs an indexed catalog to facilitate efficient and rapid searching.
Indexing Service can extract both text and property information from files on the local host and on remote, networked hosts. The files can be simply members of a selected file system or part of a virtual Web hosted by, for example, Internet Information Services (IIS).
Indexing Service extracts the content by filtering, using filter components that understand a file’s format. The format could include multi-language features such as international languages and locales. A filter component implements the IFilter interface, which supplies methods to read a file to extract text and properties. Windows 2000 and Microsoft Windows XP supply filters for Microsoft Office files, Hypertext Markup Language (HTML) files, Multipurpose Internet Mail Extension (MIME) messages, and plain-text files.
Indexing Service then merges the extracted information into catalogs of indexes for efficient searches. Indexing is the overall process of filtering, creating index entries, and merging them into catalogs.
The final step in the indexing process is creation of a catalog that contains a master index (and any temporary word lists and shadow indexes) storing words and their locations within a set of indexed documents. Subsequently, searching, or querying, the catalogs for particular word combinations uses the master index as well as word lists and shadow indexes to execute queries quickly and efficiently.
Developer audience
The Indexing Service application programming interface (API) provides additional versatile and flexible facilities for programmatically interacting with Indexing Service. These facilities include:
- Admin and Query Helper objects and ActiveX Data Object (ADO) methods for use with Microsoft Visual Basic, Microsoft Visual Basic Scripting Edition (VBScript), Microsoft Visual J++ and Microsoft JScript development software.
- ISAPI Extensions for use in .idq, .ida, and .htx files.
- OLE DB Helper functions for use with Microsoft Visual C++ development system.
- OLE DB Provider for Indexing Service interfaces for use with Visual C++.
- IFilter interface for use with Visual C++.
In this section
- About the Indexing Service
- Getting Started
- Using Indexing Service with File Systems
- Using Indexing Service with Web Servers
- Using Custom Filters with Indexing Service
- Extending Language Resources for Indexing Service
- Troubleshooting Indexing Service
- Indexing Service Reference
- OLE DB Provider for Indexing Service
Что такое Индексация сайта в поисковых системах (Web-indexing)
Индексация сайта в поисковых системах (Web-indexing): добавление информации о сайте роботом поисковой машины в базу данных, необходимой для полнотекстового поиска данных на проиндексированных ресурсах.
Информация о сайте включает ссылки, ключевые запросы, статьи, документы, изображения, аудио и ряд других. Индексация сайтов в поисковой системе Яндекс занимает 1−4 недели, а в Google — от нескольких минут до 7 дней. Страницы, прошедшие индексацию, сохраняются в базе данных, именуемой «поисковой индекс». Результаты, отвечающие на запросы пользователей, поисковая система ищет именно в этой базе данных. Если страница отсутствует в поисковом индексе, ее невозможно найти через поисковую систему.
Узнайте больше в нашем центре интернет-образования
Практический курс «SMM для бизнеса: привлечение и удержание клиентов» Подробнее
Практический курс «Storytelling для бизнеса (и не только): как запомниться и продавать больше?» Подробнее
Этот сайт использует файлы cookie. Это необходимо для изучения ваших предпочтений, а также для сбора аналитических данных о посещениях сайта. Продолжая использовать наш сайт, вы даете согласие на обработку файлов cookie, в соответствии с Соглашением.
СОГЛАШЕНИЕ ОБ ИСПОЛЬЗОВАНИИ ФАЙЛОВ COOKIE
Сайт www.promowebcom.by использует файлы cookie и схожие технологии, чтобы предоставлять услуги, отвечающие интересам и потребностям пользователей, а также собирать статистическую и маркетинговую информацию для анализа и совершенствования наших услуг. При использовании данного сайта, Вы подтверждаете свое согласие на использование файлов cookie. Если Вы не согласны с тем, чтобы мы использовали данный тип файлов, то Вы должны соответствующим образом установить настройки браузера или не использовать данный сайт.
Обращаем Ваше внимание на то, что при блокировании или удалении файлов cookie, мы не можем гарантировать корректную работу нашего сайта в Вашем браузере. Файлы cookie, которые сохраняются через сайт, не содержат сведений, на основании которых можно Вас идентифицировать.
ОБЩИЕ ПОЛОЖЕНИЯ
Во время просмотра любой страницы сайта на ваш компьютер загружается сама страница, а также может загружаться небольшой текстовый файл под названием cookie, позволяющий определить, был ли конкретный компьютер и/или Пользователь на этом сайте ранее.
Некоторые посещаемые Вами страницы могут также собирать информацию, используя пиксельные тэги и веб-маяки, представляющие собой электронные изображения, называемые одно-пиксельными (1×1) или пустыми GIF-изображениями.
Файлы cookie могут размещаться на Вашем устройстве администрацией сайта (такие файлы называются «собственными»). Некоторые файлы cookie могут размещаться на Вашем устройстве другими операторами. Такие файлы cookie называются файлами «третьих лиц».
Мы используем два вида файлов cookie на сайте: «cookie сессии» и «постоянные cookie». Cookie сессии — это временные файлы, которые остаются на устройстве пока Вы не покинете сайт. Постоянные cookie остаются на устройстве в течение длительного времени или пока Вы вручную не удалите их (как долго cookie останется на вашем устройстве будет зависеть от продолжительности или «времени жизни» конкретного файла и настройки Вашего браузера).
ИСПОЛЬЗУЕМЫЕ ФАЙЛЫ COOKIE
Необходимые. Эти файлы нужны для обеспечения правильной работы сайта, использования его функций. Отключение использования таких файлов приведет к падению производительности сайта, невозможности использовать его компоненты и сервисы.
Файлы cookie, относящиеся к производительности, эффективности и аналитике. Данные файлы позволяют анализировать взаимодействие посетителей с сайтом, оптимизировать содержание сайта, измерять эффективность рекламных кампаний, предоставляя информацию о количестве посетителей сайта, времени его использования, возникающих ошибках.
Функциональные файлы cookie запоминают пользователей, которые уже заходили на наш сайт, их индивидуальные параметры (такие как язык и регион, например) и предпочтения, и помогают индивидуализировать содержание сайта.
Рекламные файлы cookie определяют, какие сайты Вы посещали и как часто, какие ссылки Вы выбирали, что позволяет показывать Вам рекламные объявления, которые заинтересуют именно Вас.
Сторонние веб-сервисы. Иногда на данном сайте мы используем сторонние веб-сервисы. Например, для отображения тех или иных элементов (изображения, видео, презентации и т. п.), организации опросов и т.п.
УПРАВЛЕНИЕ ФАЙЛАМИ COOKIE
Большинство браузеров изначально настроены автоматически принимать файлы cookie. Пользователь может изменить настройки таким образом, чтобы браузер блокировал файлы cookie или предупреждал, когда файлы данного типа будут отправлены на устройство. Есть несколько способов управления файлами cookie. Пожалуйста, обратитесь к инструкции браузера для того, чтобы узнать больше о том, как скорректировать или изменить настройки браузера.
Если Вы настроили свой компьютер на полный запрет приема cookie файлов, Вы по-прежнему можете анонимно посещать сайт до тех пор, пока Вы не пожелаете воспользоваться одной из услуг сайта. При этом необходимо учитывать, что при полном отключении файлов cookie некоторые персональные услуги не могут быть предоставлены Пользователю, а также что Пользователь, выбравший такие настройки, не сможет получить полный доступ ко всем разделам сайта.
ВНЕСЕНИЕ ИЗМЕНЕНИЙ В СОГЛАШЕНИЕ ОБ ИСПОЛЬЗОВАНИИ ФАЙЛОВ COOKIE
Мы можем обновлять настоящее Соглашение об использовании файлов cookie по мере необходимости, например, для отображения в ней изменений, касающихся используемых файлов cookie.
Мы рекомендуем регулярно просматривать положения настоящего Соглашение об использовании файлов cookie, чтобы получать актуальную информацию об используемых файлах cookie и связанных с ними технологий.
Если у Вас возникнут вопросы об использовании файлов cookie или других технологий, Вы можете связаться с нами, используя контакты, размещенные на нашем сайте.
Настроить глобальный поиск
Сервис глобального поиска (Global Search Service) создан для интеграции ElasticSearch c Creatio и выполняет следующие функции:
- Регистрирующую:
- Подписывает клиента, создавая индекс в ElasticSearch и сохраняет связь индекс-приложение.
- Отключает клиента, по требованию удаляя индекс в ElasticSearch.
- Участвует в процессе индексации — забирает данные из базы данных.
Последовательность действий при настройке глобального поиска зависит от того, какую версию сервиса вы будете использовать. Для последней версии Creatio рекомендуется всегда использовать новейшую версию сервиса глобального поиска.
Развертывание компонентов глобального поиска версии 3.0 можно выполнять с использованием оркестратора Kubernetes и пакетного менеджера Helm или Docker.
Для поддержания работоспособности сервиса и возможности быстрого восстановления данных после отказа, например, в случае перебоев с электроэнергией, рекомендуется раз в сутки выполнять резервное копирование Elasticsearch.
Если у вас возникнут вопросы в ходе настройки, то рекомендуем ознакомиться со статьей Часто задаваемые вопросы по глобальному поиску и дедупликации.
Настроить сервис глобального поиска с использованием Kubernetes
Для настройки сервиса скачайте исходные файлы. Скачать файлы.
Чтобы установить сервис:
- Настройте целевое окружение:
- Кластер Kubernetes. Подробно о том, как настроить и администрировать кластер, читайте в документации Kubernetes.
- Пакетный менеджер Helm. Установка пакетного менеджера подробно описана в документации Helm.
На заметку. Для высоконагруженых сред рекомендуется разворачивать ElasticSearch в кластере. Подробнее читайте в документации ElasticSearch (на английском) .
- Для Redis:
- Отключите установку сервиса. Для этого в секции redis файла values-onsite.yaml установите значение enabled: false .
redis: enabled: false
global: redis: host: [host] port: [port] database: [database]
rabbitmq: enabled: false
global: rabbitmq: host: [host] vhost: [vhost] port: [port] user: [user] password: [password]
postgresql: enabled: false
global: db: user: [user] password: [password] database: [database] host: [host] port: [port]
elasticsearch: enabled: false
global: elasticsearch: url: [url] user: [user] password: [password]
На заметку. По умолчанию сервисы разворачиваются с типом NodePort.
Основные параметры сервиса глобального поиска, которые используются в файле values.yaml.
Периодичность запуска первичной индексации, в миллисекундах.
Таймаут запроса в БД Creatio при первичной индексации, в секундах.
Таймаут запроса в БД Creatio при мгновенной индексации, в секундах.
Количество дней, за которые будут индексироваться измененные записи в рамках одной итерации первичной индексации. Влияет на скорость индексации и нагрузку на БД Creatio. Чем больше значение, тем быстрее индексация и больше нагрузка. Чем меньше значение, тем дольше индексация и меньше нагрузка.
Максимальная длинна текстовых полей при индексации.
Параметры подключения к ElasticSearch.
Публичный адрес к search-service, в формате http://k8s-node:30332.
Настройки подключения к RabbitMQ.
Настройки подключения к внутренней сервисной базе данных сервиса глобального поиска.
Настройки подключения к Redis.
Настроить сервис глобального поиска в Docker
Для настройки глобального поиска необходимы два отдельных физических или виртуальных сервера (“сервер 1” и “сервер 2”) с установленной ОС Linux. Для расчета требований к серверам воспользуйтесь калькулятором системных требований.
Важно. Для настройки глобального поиска необходимы базовые знания администрирования ПО Docker и ОС Linux.
С перечнем поддерживаемых ОС вы можете ознакомиться в документации Docker. В зависимости от потребностей вашей компании можно использовать Docker Community Edition (CE) или Enterprise Edition (EE). Подробную информацию вы найдете в документации Docker.
На заметку. Настройки ниже актуальны для сервиса глобального поиска версии 3.0. Если вам необходимо настроить сервис глобального поиска более ранней версии, то ознакомьтесь с описанием настроек в документации Creatio версии 7.16.
Чтобы обновить глобальный поиск с версии 2.0 на версию 3.0, необходимо удалить все docker volume версии 2.0 на серверах 1 и 2 при помощи команды docker-compose down -v и повторно выполнить установку и настройку всех сервисов.
Компоненты глобального поиска
Развертывается на сервере 1:
- elasticsearch — поисковый движок.
Развертываются на сервере 2:
- postgres — база данных конфигурирования компонентов глобального поиска.
- rabbitmq — брокер сообщений.
- redis — хранилище данных, используемое для кеширования и быстродействия.
- gs-web-api — web-сервис конфигурирования компонентов глобального поиска.
- gs-web-indexing-service — web-сервис для обработки запросов точечного индексирования данных из системы.
- gs-search-service — web-сервис поиска данных, proxy для elasticsearch.
- gs-scheduler — планировщик задач индексации данных из Creatio в ElasticSearch.
- gs-worker — компонент индексирования данных из Creatio в ElasticSearch по задачам планировщика.
- gs-worker-replay — компонент, обрабатывающий результаты индексации (результаты работы gs-worker-а).
- gs-worker-single — компонент точечной индексации данных бизнес-процессов в ElasticSearch по запросу из бизнес-процесса.
- gs-worker-single-replay — компонент, обрабатывающий исключения в процессе точечной индексации (результаты работы gs-worker-single).
- gs-worker-single-task — компонент для постановки задач компоненту gs-worker-single.
- gs-worker-querried-single-task — компонент для формирования задач компоненту gs-worker-single.
Для настройки компонентов скачайте исходные файлы. Скачать файлы.
Список портов, используемых компонентами глобального поиска:
Важно. Если вы используете FireWall, убедитесь, что все перечисленные порты доступны и открыты.
Входящий порт настраивается переменной WEB_API_PORT
Входящий порт настраивается переменной WEB_INDEXING_SERVICE_PORT
Входящий порт настраивается переменной SEARCH_SERVICE_PORT
Необходимо соединение с сервером, на котором расположен elasticsearch
Необходимо соединение с сервером, на котором расположен elasticsearch
Последовательность действий для настройки глобального поиска
- Установить Docker на физическую или виртуальную машину с операционной системой Linux.
- Установить Docker-Compose.
- Установить ElasticSearch.
- Настроить переменные контейнеров.
- Установить и запустить компоненты Global Search Service.
- Подключить функциональность глобального поиска в Creatio.
Установить Docker
Для развертывания компонентов глобального поиска необходимо установить Docker на операционную систему Linux. Для установки воспользуйтесь инструкцией в документации Docker.
Для проверки установленной версии Docker запустите команду docker —version на linux-машине.
Установить Docker-Compose
Для установки Docker-Compose воспользуйтесь инструкцией в документации Docker .
Установить ElasticSearch
На заметку. В данной инструкции описано развертывание ElasticSearch в Docker-Compose. Вы также можете развернуть его как daemon OS, что позволит обойтись без предварительной установки Docker и Docker-Compose. Для этого воспользуйтесь инструкцией в документации ElasticSearch.
Для установки ElasticSearch:
- На сервере, выделенном для установки ElasticSearch (сервер 1), зайдите в папку /opt.
- Распакуйте в открытую папку архив с установочными файлами.
docker-compose up -d
docker logs es-01
Настроить переменные контейнеров
Все контейнеры компонентов глобального поиска конфигурируются из файла с переменными среды (environment variables). Переменные содержатся в файле /opt/compose/services/.env. Установите значения переменных, отредактировав этот файл.
Значение по умолчанию
Внешний хост ElasticSearch, который используется для доступа из Creatio. Необходимо указать ip-адрес сервера, на котором развернут ElasticSearch.
Внешний ip-адрес сервера, на котором развернуты сервисы глобального поиска (сервер 2).
На заметку. Чтобы проверить внешний ip-адрес сервера, выполните команду hostname -I | awk ‘< print $1 >‘
Дополнительные переменные, которые управляют параметрами индексации данных в ElasticSearch
Значение по умолчанию
Количество дней, которое необходимо проиндексировать за одну итерацию планировщика. Для сравнения используются данные колонки ModifiedOn записей системы.
Интервал сбора данных из БД Creatio регулярным планировщиком. Чем меньше этот параметр, тем выше нагрузка на БД Creatio, но быстрее происходит первичная индексация.
30000 (указывается в миллисекундах)
Запустить контейнеры с компонентами Global Search Service
Важно. Для корректной работы контейнеров необходимо, чтобы UTC-время на linux-машине, на которой установлен Docker, соответствовало UTC-времени на сервере БД Creatio. Допустимое отклонение — до пяти минут. Иначе глобальный поиск может индексировать не все записи.
- На сервере, выделенном для установки компонентов глобального поиска (сервер 2), зайдите в папку opt.
- Распакуйте в открытую папку архив с установочными файлами. Скачать архив
- Перейдите в папку с компонентами /opt/compose/services и выполните команду:
docker-compose up -d
Проверить успешность запуска контейнеров
Для просмотра всех запущенных контейнеров глобального поиска введите в консоли команду:
docker ps --filter "label=service=gs" -a --format "table >\t>\t>\t>"
Все запущенные контейнеры должны быть со статусом Up.
Логирование
По умолчанию в контейнере логирование происходит в stdout и stderr.
На заметку. docker logs —tail 100 gs-worker-01 выводит 100 последних строк логов из контейнера gs-worker.
На заметку. При старте возможны ситуации, когда контейнер mysql или rabbitmq временно недоступны, так как они запускаются позже остальных компонентов. В этом случае дождитесь, пока в логах не отобразится сообщение об удачном подключении и запуске контейнера, например: “Now listening on: http:// :: :80 Application started. Press Ctrl+C to shut down”.
Подключить сервис глобального поиска в Creatio
Действия на сервере
Для подключения глобального поиска к Creatio выполните следующие действия на сервере, где находятся компоненты глобального поиска (для сервиса, развернутоо в Docker, это сервер 2):
-
Для http-запросов установите утилиту api-get install curl или yum install curl.
apt-get install curl
- DATABASE_TYPE — тип базы данных Creatio (mssql, postgresql или oracle).
- DATABASE_CONNECTION_STRING — строка подключения к БД Creatio.
- SITE_NAME — название сайта Creatio, например, my-test-site.
- SERVER2_IP_ADDRESS (только для Docker) — IP-адрес Linux сервера, на котором развернуты компоненты глобального поиска. GS_WEB_API_URL (только для Kubernetes) — IP-адрес Linux сервера, на котором развернуты компоненты глобального поиска.
curl -v -X POST -d '' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/[SITE_NAME]*
curl -v -X POST -d '' -H "Content-Type: application/json" http:// [ GS_WEB_API_URL ]/sites/[SITE_NAME]*
Пример для PostgreSQL. server=[SERVER_IP];port=5432;database=[DB_NAME];user
Выполните http-запрос на подключение поиска к ранее добавленному сайту, указав:
- SITE_NAME — название сайта Creatio, например, my-test-site.
- TEMPLATE_NAME — название шаблона поиска, который используется в ElasticSearch. Перечень доступных к использованию шаблонов приведен в таблице ниже.
- SERVER2_IP_ADDRESS (только для Docker) — IP-адрес Linux сервера, на котором развернуты компоненты глобального поиска. GS_WEB_API_URL (только для Kubernetes) — IP-адрес Linux сервера, на котором развернуты компоненты глобального поиска.
curl -v -X POST -d '' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/[SITE_NAME]/search
curl -v -X POST -d '' -H "Content-Type: application/json" http:// [ GS_WEB_API_URL ] /sites/[SITE_NAME]/search
Пример. Для Docker: curl -v -X POST -d ‘<"templateName": "default.json">‘ -H «Content-Type: application/json» http://[SERVER2_IP_ADDRESS]:81/sites/my-test-site/search Для Kubernetes: curl -v -X POST -d ‘<"templateName": "default.json">‘ -H «Content-Type: application/json» http:// [GS_WEB_API_URL] /sites/my-test-site/search"templateName":>
На заметку. Приведенный запрос вернет URL к созданному индексу в ElasticSearch. URL нужно сохранить и использовать в приведенном ниже sql-скрипте установки системных настроек.
Важно. Чтобы изменить шаблон поиска, выполните DELETE запрос на /sites//search и http-запрос на подключение поиска, описанный выше, после чего будет выполнена полная переиндексация сайта.
Все доступные шаблоны поиска и их характеристики приведены в таблице ниже:
Старый шаблон (версия 1.6)
Поиск по части слова
Поиск по слову с опечатками
Поиск по части номера телефона в средствах связи
Нечеткий поиск по средствам связи
Поиск с перестановкой слов
Поиск по точному совпадению
Поиск по двум символам
Примерная скорость поиска (чем меньше, тем лучше)
Размер индекса на elasticsearch (чем меньше, тем лучше)
Время полной первичной индексации (чем меньше, тем лучше)
Действия на стороне Creatio для СУБД MS SQL
- Включите в Creatio функциональность (Feature Toggle) глобального поиска (GlobalSearch, GlobalSearch_V2 GlobalSearchRelatedEntityIndexing), выполнив sql-скрипт:
DECLARE @GS_REIndexingFeature NVARCHAR(50) = 'GlobalSearchRelatedEntityIndexing'; DECLARE @GS_REIndexingFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @GS_REIndexingFeature); DECLARE @GlobalSearchFeature NVARCHAR(50) = 'GlobalSearch'; DECLARE @GlobalSearchFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @GlobalSearchFeature); DECLARE @GlobalSearchV2Feature NVARCHAR(50) = 'GlobalSearch_V2'; DECLARE @GlobalSearchV2FeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @GlobalSearchV2Feature); DECLARE @allEmployeesId UNIQUEIDENTIFIER = 'A29A3BA5-4B0D-DE11-9A51-005056C00008'; IF (@GlobalSearchFeatureId IS NOT NULL) BEGIN IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GlobalSearchFeatureId) UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GlobalSearchFeatureId ELSE INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GlobalSearchFeatureId) END; ELSE BEGIN SET @GlobalSearchFeatureId = NEWID() INSERT INTO Feature (Id, Name, Code) VALUES (@GlobalSearchFeatureId, @GlobalSearchFeature, @GlobalSearchFeature) INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GlobalSearchFeatureId) END; IF (@GlobalSearchV2FeatureId IS NOT NULL) BEGIN IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GlobalSearchV2FeatureId) UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GlobalSearchV2FeatureId ELSE INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',@GlobalSearchV2FeatureId) END; ELSE BEGIN SET @GlobalSearchV2FeatureId = NEWID() INSERT INTO Feature (Id, Name, Code) VALUES (@GlobalSearchV2FeatureId, @GlobalSearchV2Feature, @GlobalSearchV2Feature) INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',@GlobalSearchV2FeatureId) END; IF (@GS_REIndexingFeatureId IS NOT NULL) BEGIN IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GS_REIndexingFeatureId) UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GS_REIndexingFeatureId ELSE INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GS_REIndexingFeatureId) END; ELSE BEGIN SET @GS_REIndexingFeatureId = NEWID() INSERT INTO Feature (Id, Name, Code) VALUES (@GS_REIndexingFeatureId, @GS_REIndexingFeature, @GS_REIndexingFeature) INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GS_REIndexingFeatureId) END;
- “GlobalSearchUrl” — полный путь в elasticsearch с учетом индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта. Пример строки для Docker: http://[SERVER2_IP_ADDRESS]:83/indexname. Пример строки для Kubernetes: http://[GS-SEARCH-SERVICE_URL] /indexname.
- GlobalSearchConfigServiceURL” — ссылка на API глобального поиска. Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:81. Значение по умолчанию для Kubernetes: http:// [GS_WEB_API_URL].
- “GlobalSearchIndexingApiUrl” — ссылка на сервис моментальной индексации. Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:82. Значение по умолчанию для Kubernetes: http://[GS-WEB-INDEXING-SERVICE_URL].
UPDATE SysSettingsValue SET TextValue = [укажите URL к индексу ElasticSearch, строка типа: http://[SERVER2_IP_ADDRESS]:83/indexname] WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchUrl') UPDATE SysSettingsValue SET TextValue = [укажите URL к Global Search Service, строка типа: http://SERVER2_IP_ADDRESS:81] WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchConfigServiceUrl') UPDATE SysSettingsValue SET TextValue = [укажите URL к Global Search Indexing Service, строка типа: http://SERVER2_IP_ADDRESS:82] WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchIndexingApiUrl')
UPDATE SysSettingsValue SET TextValue = [укажите URL к индексу ElasticSearch, строка типа: http://[GS-SEARCH-SERVICE_URL]/indexname] WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchUrl') UPDATE SysSettingsValue SET TextValue = [укажите URL к Global Search Service, строка типа: http:// GS_WEB_API_URL] WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchConfigServiceUrl') UPDATE SysSettingsValue SET TextValue = [укажите URL к Global Search Indexing Service, строка типа: http:// GS-WEB-INDEXING-SERVICE_URL] WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchIndexingApiUrl')
Действия на стороне Creatio для СУБД Oracle
- Включите в Creatio функциональность (Feature Toggle) глобального поиска (GlobalSearch, GlobalSearch_V2 GlobalSearchRelatedEntityIndexing), выполнив sql-скрипт:
CREATE OR REPLACE FUNCTION generate_uuid return varchar2 is v_uuid varchar2(38); v_guid varchar2(32); BEGIN v_guid := sys_guid(); v_uuid := lower( '' ); RETURN v_uuid; END; / DECLARE GS_REIndexingFeature VARCHAR(50) := 'GlobalSearchRelatedEntityIndexing'; GS_REIndexingFeatureId VARCHAR(38) := NULL; GS_REIndexingFeatureId_GUID VARCHAR(38) := generate_uuid(); GlobalSearchFeature VARCHAR(50) := 'GlobalSearch'; GlobalSearchFeatureId VARCHAR(38) := NULL; GlobalSearchFeatureId_GUID VARCHAR(38) := generate_uuid(); GlobalSearchV2Feature VARCHAR(50) := 'GlobalSearch_V2'; GlobalSearchV2FeatureId VARCHAR(38) := NULL; GlobalSearchV2FeatureId_GUID VARCHAR(38) := generate_uuid(); allEmployeesId VARCHAR(38) := ''; State_GlobalSearch VARCHAR(1) := NULL; State_GlobalSearchV2 VARCHAR(1) := NULL; State_GS_REI VARCHAR(1) := NULL; BEGIN SELECT MAX("Id") INTO GlobalSearchFeatureId FROM "Feature" WHERE "Code" = GlobalSearchFeature AND rownum = 1; SELECT MAX("Id") INTO GlobalSearchV2FeatureId FROM "Feature" WHERE "Code" = GlobalSearchV2Feature AND rownum = 1; SELECT MAX("Id") INTO GS_REIndexingFeatureId FROM "Feature" WHERE "Code" = GS_REIndexingFeature AND rownum = 1; SELECT MAX("FeatureState") INTO State_GlobalSearch FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchFeatureId AND rownum = 1; SELECT MAX("FeatureState") INTO State_GlobalSearchV2 FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchV2FeatureId AND rownum = 1; SELECT MAX("FeatureState") INTO State_GS_REI FROM "AdminUnitFeatureState" WHERE FeatureId" = GS_REIndexingFeatureId AND rownum = 1; IF (GlobalSearchFeatureId IS NULL) THEN INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchFeatureId_GUID, GlobalSearchFeature, GlobalSearchFeature); INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId_GUID); ELSE IF (State_GlobalSearch IS NOT NULL) THEN UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchFeatureId; ELSE INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId_GUID); END IF; END IF; IF (GlobalSearchV2FeatureId IS NULL) THEN INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchV2FeatureId_GUID, GlobalSearchV2Feature, GlobalSearchV2Feature); INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId_GUID); ELSE IF (State_GlobalSearchV2 IS NOT NULL) THEN UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchV2FeatureId; ELSE INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId_GUID); END IF; END IF; IF (GS_REIndexingFeatureId IS NULL) THEN INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GS_REIndexingFeatureId_GUID,GS_REIndexingFeature, GS_REIndexingFeature); INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_REIndexingFeatureId_GUID); ELSE IF (State_GS_REI IS NOT NULL) THEN UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" =GS_REIndexingFeatureId; ELSE INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_REIndexingFeatureId_GUID); END IF; END IF; END;- “GlobalSearchUrl” — полный путь в elasticsearch с учетом индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта. Пример строки для Docker: http://[SERVER2_IP_ADDRESS]:83/indexname. Пример строки для Kubernetes: http://[GS-SEARCH-SERVICE_URL] /indexname
- GlobalSearchConfigServiceURL” — ссылка на API глобального поиска. Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:81. Значение по умолчанию для Kubernetes: http:// [GS_WEB_API_URL].
- “GlobalSearchIndexingApiUrl” — ссылка на сервис моментальной индексации. Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:82. Значение по умолчанию для Kubernetes: http://[GS-WEB-INDEXING-SERVICE_URL].
DECLARE URL_SETTING_ID VARCHAR(38) := NULL; CONFIG_URL_SETTING_ID VARCHAR(38) := NULL; IND_API_SETTING_ID VARCHAR(38) := NULL; URL_VAL_ID VARCHAR(38) := NULL; CONFIG_URL_VAL_ID VARCHAR(38) := NULL; IND_API_VAL_ID VARCHAR(38) := NULL; SYS_ADMIN_UID VARCHAR(38) := ''; ES_IND VARCHAR(500) := '[укажите URL к индексу ElasticSearch, строка, сл. типа - http://[SERVER2_IP_ADDRESS]:83/indexname]'; CONFIG_URL VARCHAR(500) := '[укажите URL к Global Search Service, строка следующего типа: http://SERVER2_IP_ADDRESS:81]'; IND_API_URL VARCHAR(500) := '[укажите URL к Global Search Indexing Service, строка следующего типа: http://SERVER2_IP_ADDRESS:82]'; BEGIN SELECT "Id" INTO URL_SETTING_ID FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl'; SELECT "Id" INTO CONFIG_URL_SETTING_ID FROM "SysSettings" WHERE "Code" = 'GlobalSearchConfigServiceUrl'; SELECT "Id" INTO IND_API_SETTING_ID FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl'; SELECT MAX("Id") INTO URL_VAL_ID FROM "SysSettingsValue" WHERE "SysSettingsId" = URL_SETTING_ID; SELECT MAX("Id") INTO CONFIG_URL_VAL_ID FROM "SysSettingsValue" WHERE "SysSettingsId" = CONFIG_URL_SETTING_ID; SELECT MAX("Id") INTO IND_API_VAL_ID FROM "SysSettingsValue" WHERE "SysSettingsId" = IND_API_SETTING_ID; IF (URL_VAL_ID IS NULL) THEN INSERT INTO "SysSettingsValue" ("SysSettingsId", "SysAdminUnitId", "IsDef", "TextValue") VALUES (URL_SETTING_ID, SYS_ADMIN_UID, '1', ES_IND); ELSE UPDATE "SysSettingsValue" SET "TextValue" = ES_IND WHERE "SysSettingsId" = URL_SETTING_ID; END IF; IF (CONFIG_URL_VAL_ID IS NULL) THEN INSERT INTO "SysSettingsValue" ("SysSettingsId", "SysAdminUnitId", "IsDef", "TextValue") VALUES (CONFIG_URL_SETTING_ID, SYS_ADMIN_UID, '1', CONFIG_URL); ELSE UPDATE "SysSettingsValue" SET "TextValue" = CONFIG_URL WHERE "SysSettingsId" = CONFIG_URL_SETTING_ID; END IF; IF (IND_API_VAL_ID IS NULL) THEN INSERT INTO "SysSettingsValue" ("SysSettingsId", "SysAdminUnitId", "IsDef", "TextValue") VALUES (IND_API_SETTING_ID, SYS_ADMIN_UID, '1', IND_API_URL); ELSE UPDATE "SysSettingsValue" SET "TextValue" = IND_API_URL WHERE "SysSettingsId" = IND_API_SETTING_ID; END IF; END;DECLARE URL_SETTING_ID VARCHAR(38) := NULL; CONFIG_URL_SETTING_ID VARCHAR(38) := NULL; IND_API_SETTING_ID VARCHAR(38) := NULL; URL_VAL_ID VARCHAR(38) := NULL; CONFIG_URL_VAL_ID VARCHAR(38) := NULL; IND_API_VAL_ID VARCHAR(38) := NULL; SYS_ADMIN_UID VARCHAR(38) := ''; ES_IND VARCHAR(500) := '[укажите URL к индексу ElasticSearch, строка, сл. типа - http://[GS-SEARCH-SERVICE_URL]/indexname]'; CONFIG_URL VARCHAR(500) := '[укажите URL к Global Search Service, строка следующего типа: http:// GS_WEB_API_URL]'; IND_API_URL VARCHAR(500) := '[укажите URL к Global Search Indexing Service, строка следующего типа: http:// GS-WEB-INDEXING-SERVICE_URL]'; BEGIN SELECT "Id" INTO URL_SETTING_ID FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl'; SELECT "Id" INTO CONFIG_URL_SETTING_ID FROM "SysSettings" WHERE "Code" = 'GlobalSearchConfigServiceUrl'; SELECT "Id" INTO IND_API_SETTING_ID FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl'; SELECT MAX("Id") INTO URL_VAL_ID FROM "SysSettingsValue" WHERE "SysSettingsId" = URL_SETTING_ID; SELECT MAX("Id") INTO CONFIG_URL_VAL_ID FROM "SysSettingsValue" WHERE "SysSettingsId" = CONFIG_URL_SETTING_ID; SELECT MAX("Id") INTO IND_API_VAL_ID FROM "SysSettingsValue" WHERE "SysSettingsId" = IND_API_SETTING_ID; IF (URL_VAL_ID IS NULL) THEN INSERT INTO "SysSettingsValue" ("SysSettingsId", "SysAdminUnitId", "IsDef", "TextValue") VALUES (URL_SETTING_ID, SYS_ADMIN_UID, '1', ES_IND); ELSE UPDATE "SysSettingsValue" SET "TextValue" = ES_IND WHERE "SysSettingsId" = URL_SETTING_ID; END IF; IF (CONFIG_URL_VAL_ID IS NULL) THEN INSERT INTO "SysSettingsValue" ("SysSettingsId", "SysAdminUnitId", "IsDef", "TextValue") VALUES (CONFIG_URL_SETTING_ID, SYS_ADMIN_UID, '1', CONFIG_URL); ELSE UPDATE "SysSettingsValue" SET "TextValue" = CONFIG_URL WHERE "SysSettingsId" = CONFIG_URL_SETTING_ID; END IF; IF (IND_API_VAL_ID IS NULL) THEN INSERT INTO "SysSettingsValue" ("SysSettingsId", "SysAdminUnitId", "IsDef", "TextValue") VALUES (IND_API_SETTING_ID, SYS_ADMIN_UID, '1', IND_API_URL); ELSE UPDATE "SysSettingsValue" SET "TextValue" = IND_API_URL WHERE "SysSettingsId" = IND_API_SETTING_ID; END IF; END;Действия на стороне Creatio для СУБД PostgreSQL
- Включите в Creatio функциональность (Feature Toggle) глобального поиска (GlobalSearch, GlobalSearch_V2 GlobalSearchRelatedEntityIndexing), выполнив sql-скрипт:
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" = GS_RelatedEntityIndexingFeatureId) 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 $$;- “GlobalSearchUrl” — полный путь в elasticsearch с учетом индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта. Пример строки для Docker: http://[SERVER2_IP_ADDRESS]:83/indexname. Пример строки для Kubernetes: http://[GS-SEARCH-SERVICE_URL] /indexname.
- GlobalSearchConfigServiceURL” — ссылка на API глобального поиска. Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:81. Значение по умолчанию для Kubernetes: http:// [GS_WEB_API_URL].
- “GlobalSearchIndexingApiUrl” — ссылка на сервис моментальной индексации. Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:82. Значение по умолчанию для Kubernetes: http://[GS-WEB-INDEXING-SERVICE_URL].
Для этого выполните следующий скрипт:
UPDATE "SysSettingsValue" SET "TextValue" = [укажите URL к индексу ElasticSearch, строка следующего типа: http://[SERVER2_IP_ADDRESS]:83/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 );
UPDATE "SysSettingsValue" SET "TextValue" = [укажите URL к индексу ElasticSearch, строка следующего типа: http://[GS-SEARCH-SERVICE_URL /indexname] WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl' LIMIT 1 ); UPDATE "SysSettingsValue" SET "TextValue" = [укажите URL к Global Search Service, строка следующего типа: http:// [GS_WEB_API_URL ] WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchConfigServiceUrl' LIMIT 1 ); UPDATE "SysSettingsValue" SET "TextValue" = [укажите URL к Global Search Indexing Service, строка, следующего типа - http:// [GS-WEB-INDEXING-SERVICE_URL] WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl' LIMIT 1 );
Что иногда значит маленькая галочка или битва с великой службой Microsoft Indexing Service

Стояла передо мной типичная задача – организовать полнотекстовый поиск по материалам для сайта. В силу ряда причин (техническое обеспечение хостинга сайта, организация сайта, политика компании) был выбран вариант с использованием службы MicrosoftIndexingService, тем более что ее функционала для тривиального поиска по текстовым файлам хватало.
По истечении некоторого времени был разработан код, который великолепно работал на локальной машине, но как только его перенесли на тестовый сервер – поиск перестал работать :‑(
Не буду подробно описывать, что я делал, чтобы восстановить работоспособность, скажу только, что в ходе этих мытарств сайт, заточенный под конкретные настройки, стал более гибким к настройке (что меня несколько успокаивало). Однако поиск все равно не работал.
Был настроен каталог полнотекстового индекса, для него добавлены папки, подобраны соответствующие запросы, проверены все настройки службы – не работает… =(
Как оказалось, все дело в маленькой галочке (точнее, ее отсутствии) в расширенных атрибутах файла (да и папки) «Индексировать содержимое для быстрого поиска». И подсказал мне это решение человек, далекий от программирования и никогда не работавший со службой индексирования. Вот так! Кстати, этот атрибут наследуется от предка, т.е. вы можете задать его и у папки.
PS: Замечания для веб-программистов – в свойствах виртуальной папки или веб-узла в IIS на вкладке «Домашний каталог» есть галочка-аналог «Индексация каталога». Не забывайте про нее. Например, можно исключить из поиска некоторые служебные файлы, картинки, файлы логов и т.п.
Чтобы прочитать эту статью до конца,
авторизуйтесь или зарегистрируйтесьКомментарии 1
Сергей Мезрин 22 декабря 2006
В настоящее время любое программное обеспечение требует от его разработчика иметь хотя бы малое представление о «попутных» технологиях, работающих в той же самой среде (в общем случае — windows в целом, включая все надстраиваемые сервисы). Без этого не создать эффективно работающую программу, и хорошо, если вообще удастся создать что-то запускающееся. Но обо всех существующих взаимосвязях знать нельзя! И недостаток таких знаний у программиста приводит к необходимости иметь аналогичные знания конечным потребителям программы — пользователям. Именно поэтому любой разработчик (здесь — программист) никогда не является одиночкой. Ведь любое массово воспроизводимое изделие — результат коллективного труда, обратные примеры крайне редки. Любые программы создаются коллективом, и не важно — сидит ли этот коллектив под одной крышей или истина рождается в результате диалога с иногородним заказчиком. По моему мнению, очень важно чтобы в таком коллективе обязательно были соучастники с развитым кругозором — не только из области средств программирования. Команда программистов, не подумавшая о вышеизложенном, вынуждает пользователей создавать свой «коллектив», сообща разрешающий заложенные в ПО «особенности». И, как правило, в таком случае в сторону компании-разработчика ПО сыплются нелицеприятные отзывы.
Дмитрий, являясь «программистом» по своим прямым функциям, в описанном им случае оказался в качестве «пользователя» Microsoft Indexing Service. Программист же, написавший Microsoft Indexing Service (автор — компания Microsoft конечно :-), не продумал — на какие мучения поиска «маленькой галочки» он обрекает пользователя при попытке запустить сервис. Дмитрию пришлось прибегнуть к помощи своего пользовательского «клуба» в котором и оказался этот «далекий от программирования человек», неожиданно способный распутать клубок настроек. А выход из этой ситуации прост — предусмотреть еще на этапе разработки ПО реализацию автоматической проверки общесистемного атрибута «Индексировать содержимое для быстрого поиска». Такая проверка навсегда избавит пользователя от подобных мучений. А сколько еще таких «подводных камней».
К чему это все? А к тому, что «люди всякие нужны, люди всякие важны»! И, как мы убедились на примере Дмитрия, — со стороны пользователя, а со стороны программиста — особенно! Даже такие «далекие от программирования» 🙂