Перейти к основному содержимому

Сервис полнотекстового поиска

Сервис полнотекстового поиска предназначен для полнотекстовой индексации содержимого файлов и структурированных данных, и последующего поиска по индексированным данным.

Индексация выполняется автоматически для файлов, загружаемых через методы API файлового сервиса, и для данных классов, у которых строковые атрибуты имеют признак Индексация для полнотекстового поиска.

Поиск осуществляется с помощью методов API SearchFile и Search.

предупреждение

В методе Search параметр size должен иметь ненулевое значение.

Особенности методов API сервиса полнотекстового поиска

Метод IndexFile

Метод IndexFile индексирует существующий файл из файлового сервиса. При повторной индексации замещается предыдущая информация.

к сведению

При индексации проверяются права доступа на чтение к файлу.

Конечная точка метода: fulltextsearchservice/api/Indexing/IndexFile

{
"objectId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"versionId": "string"
}

где:

  • objectId: идентификатор файла в файловом сервисе;
  • versionId: версия файла в файловом сервисе. По умолчанию используется актуальная версия.

Метод DeleteFileIndex

Метод DeleteFileIndex удаляет информацию об индексированном файле из индекса.

Конечная точка метода: fulltextsearchservice/api/Indexing/DeleteFileIndex

{
"objectId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

где:

  • objectId: идентификатор файла в файловом сервисе.

Метод SearchFile

Метод SearchFile выполняет поиск файлов в индексе, используя синтаксис OpenSearch для поисковой строки https://opensearch.org/docs/latest/query-dsl/full-text/query-string/.

Конечная точка метода: fulltextsearchservice/api/Search/SearchFile

{
"query": "string",
"indexName": "string",
"resultFields": [ - список возвращаемых полей индекса
"string"
], - значения для пагинации
"from": 0, - индекс
"size": 0 - количество
}

где:

  • query: строка запроса в формате query_string;
  • indexName: имя индекса, если имя не задано, то поиск имени будет в основном файловом индексе. Можно задать несколько индексов через запятую.
  • resultFields: список возвращаемых полей индекса string;
  • from: индекс для пагинации, с какого элемента начинать выдачу результата;
  • size: количество элементов.

Метод Search выполняет поиск по текстовым атрибутам созданных экземпляров классов из модели данных проектов. Чтобы данные объектов модели данных проекта индексировались, необходимо в редакторе модели данных для выбранного текстового атрибута проставить отметку Полнотекстовая индексация. Теперь при создании и обновлении объектов, содержащих этот атрибут, сервис полнотекстового поиска будет пополнять и модифицировать соответствующий индекс в OpenSearch.

Конечная точка метода: fulltextsearchservice/api/Search/Search

{
"query": "string",
"projects": ["string"],
"classes": ["string"],
"from": 0,
"size": 100
}

где:

  • query: строка запроса в формате query_string.

Также для элементов задаются:

  • для обязательного элемента query: простая строка или строка с учетом синтаксиса OpenSearch https://opensearch.org/docs/latest/query-dsl/full-text/query-string/, например, query: "автомобиль AND (новичков OR профессионалов)".
  • Для необязательного элемента projects: массив псевдонимов проектов для поиска или пустой массив.
  • Для необязательного элемента classes: массив имен классов для поиска или пустой массив. Имя класса может представлять собой псевдоним класса, либо разделенные через точку псевдоним проекта и псевдоним класса.

Алгоритм выдачи результата запроса:

  • элементы projects и classes пусты (не заданы): в результат поиска попадают данные всем индексированным атрибутам, относящимся ко всем классам и всем проектам опубликованным в Хранилище Данных.
  • в элементе projects указаны проекты: поиск осуществляется по атрибутам классов, относящихся к этим проектам.
  • в элементе classes указаны составные имена классов в виде <имя проекта>.<имя класса>: поиск осуществляется по атрибутам перечисленных классов, с учетом указанных перед точкой проектов.
  • в элементе classes указаны простые имена классов: поиск осуществляется по атрибутам перечисленных классов, вне зависимости от принадлежности к проектам, даже если элемент projects не пустой.
{
"warningMessage": "string", // отсутствует, если нет предупреждения
"result": [
{
"id": "string",
"highlights": [
"string"
],
"className": "string"
}
],
}

где:

  • warningMessage: строка запроса в формате query_string;
  • id: идентификатор экземпляра класса;
  • highlights: найденные фрагменты в исходном тексте;
  • className: имя клааса, в котором обнаружен искомый текст.

Ответ метода зависит от запроса:

  • если среди указанных проектов нет классов с подлежащими индексированию атрибутами, ответ метода будет содержать элемент "warningMessage" со значением "Для следующих проектов не найден индекс: {перечень проектов}"
  • Если среди указанных классов нет таковых с подлежащими индексированию атрибутами, ответ метода будет содержать элемент "warningMessage" со значением "Для следующих классов не найден индекс: {перечень классов}"
  • Если произошли оба события, элемент "warningMessage" будет содержать как перечень проектов, так и перечень классов.

Пример запроса: поиск словосочетания, в котором встречаются либо сочетание автомобиль новичков, либо автомобиль профессионалов.

{
"query": "автомобиль AND (новичков OR профессионалов)",
"projects": [
"Tech"
],
"from": 0,
"size": 40
}

где:

  • query: строка запроса в формате query_string;
  • indexName: имя индекса, если имя не задано, то поиск имени будет в основном файловом индексе. Можно задать несколько индексов через запятую.

Метод ListIndexes

Метод ListIndexes возвращает комбинацию: индекс-проект-класс. Конечная точка метода: fulltextsearchservice/api/System/ListIndexes.

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

У запроса отсутствуют параметры и нет тела.

"result": [
{
"indexName": "string",
"project": "string",
"name": "string",
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"displayName": "string",
"description": "string",
"securityCode": "string"
}

где:

  • query: строка запроса в формате query_string;
  • indexName: имя индекса в OpenSearch;
  • project: псевдоним проекта, которому принадлежит класс с проиндексированными атрибутами;
  • name: псевдоним класса с проиндексированными атрибутами;
  • id: идентифактор класса в модели данных;
  • displayName: имя класса;
  • description: описание класса;
  • securityCode: код класса в Namespace DataService в разделе Security консоли администрирования.

Параметры конфигурации сервиса полнотекстового поиска

Параметры конфигурации сервиса полнотекстового поиска по умолчанию настроены следующим образом:

  • поддержка расширения файлов следующих форматов: txt, pdf, doc, docx, docm, xls, xlsx, xslm, rtf, csv, xml, odt, dotm, dotx, dot, htm, html, wps, odf, ods, log, uot, ott, uos, epub.
  • размер индексируемых файлов: не более 20 Mb.

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