Создайте интерфейс поиска с помощью API запросов.

API запросов предоставляет методы поиска и подсказок для создания интерфейса поиска или встраивания результатов в приложение.

Для веб-приложений с минимальными требованиями рекомендуется использовать виджет поиска. См. раздел «Создание интерфейса поиска с помощью виджета поиска» .

Создайте интерфейс поиска.

Для создания минимального интерфейса поиска необходимо выполнить несколько шагов:

  1. Настройте приложение для поиска.
  2. Сгенерируйте учетные данные OAuth для приложения.
  3. Запрос к индексу.
  4. Отобразить результаты запроса.

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

Настройте приложение для поиска.

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

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

Для получения более подробной информации см. раздел «Настройка поиска» .

Сгенерируйте учетные данные OAuth для приложения.

В дополнение к шагам, описанным в разделе «Настройка доступа к API Cloud Search» , необходимо сгенерировать учетные данные OAuth для вашего веб-приложения.

Используйте учетные данные для запроса авторизации от имени пользователя. Используйте область действия https://www.googleapis.com/auth/cloud_search.query .

Более подробную информацию о параметрах OAuth см. на сайте Google Identity Platform .

Запрос к индексу

Используйте метод search для поиска по индексу.

Каждый запрос должен содержать текстовый query и идентификатор searchApplicationId .

В этом примере выполняется запрос к источнику данных о фильмах:

{
  "query": "titanic",
  "requestOptions": {
    "searchApplicationId": "searchapplications/<search_app_id>"
  }
}

Отобразить результаты запроса

В интерфейсе поиска должно отображаться title элемента и ссылка на исходный элемент. Для улучшения отображения также можно использовать фрагменты текста и метаданные.

Обработка дополнительных результатов

Cloud Search возвращает дополнительные результаты, если для запроса недостаточно совпадений. Это указывает поле queryInterpretation . Если возвращаются только дополнительные результаты, InterpretationType имеет значение REPLACE . Если они смешаны, значение равно BLEND .

При отображении дополнительных результатов рекомендуется информировать пользователя. Например, для оператора REPLACE можно написать: «Ваш поиск не дал результатов. Показаны результаты для похожих запросов».

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

Облачный поиск возвращает документы, содержащие информацию о людях и сотрудниках, используя функцию поиска по людям. Результаты отображаются в structuredResults поле «Результаты»:

{
  "results": [...],
  "structuredResults": [{
    "person": {...}
  }]
}

Подбор непосредственных подчиненных

Функция Direct Reports Matching позволяет пользователям видеть непосредственных подчиненных человека. В ответе содержится объект assistCardProtoHolder с cardType RELATED_PEOPLE_ANSWER_CARD .

Отключить оптимизацию

Оптимизация, например, отображение дополнительных результатов, включена по умолчанию. Вы можете отключить её:

  • Поиск на уровне приложения : установите force_verbatim_mode в true .
  • Уровень запроса : Установите enableVerbatimMode в true .

Выделить фрагменты

Облачный поиск возвращает фрагмент проиндексированного текста или HTML. Если присутствуют поисковые термины, matchRanges определяет их местоположение. Используйте эти диапазоны для выделения текста.

function highlightSnippet(snippet) {
  let text = snippet.snippet;
  let formattedText = text;
  if (snippet.matchRanges) {
    let parts = [];
    let index = 0;
    for (let match of snippet.matchRanges) {
      let start = match.start || 0; // Default to 0 if omitted
      let end = match.end;
      if (index < start) { // Include any leading text before/between ranges
        parts.push(text.slice(index, start));
      }
      parts.push('<span class="highlight">');
      parts.push(text.slice(start, end));
      parts.push('</span>');
      index = end;
    }
    parts.push(text.slice(index)); // Include any trailing text after last range
    formattedText = parts.join('');
  }
  return formattedText;
}

Исходя из приведенного фрагмента:

{
  "snippet": "This is an example snippet...",
  "matchRanges": [
    {
      "start": 11,
      "end": 18
    }
  ]
}

В результате получилась следующая HTML-строка:

This is an <span class="highlight">example</span> snippet...

Отображение метаданных

Используйте поле metadata для отображения такой информации, как createTime , updateTime ) и структурированные данные. Используйте displayOptions для отображения структурированных данных.

Получить дополнительные результаты

Чтобы получить больше результатов, установите поле start на выбранное смещение. Отрегулируйте размер страницы с помощью pageSize . Используйте resultCount для отображения общего количества элементов или приблизительного количества.

Сортировать результаты

Используйте sortOptions для указания порядка сортировки:

  • operatorName : свойство, по которому выполняется сортировка.
  • sortOrder : ASCENDING or DESCENDING .

Релевантность является ключом сортировки по умолчанию и дополнительным ключом.

Добавить фильтры

Ограничьте результаты поиска с помощью фильтров в приложении поиска или запросе. Если оба запроса указывают фильтры для источника, оба должны оцениваться как истинные.

Примените фильтры в dataSourceRestrictions.filterOptions[] . Основные типы фильтров:

  • Объектные фильтры : ограничивают поиск определенным типом объектов.
  • Фильтры по значениям : ограничивают поиск по оператору и значению.

Составные фильтры объединяют несколько фильтров значений.

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

Фасеты помогают пользователям интерактивно уточнять запросы. При запросе фасетов Cloud Search вычисляет наиболее часто встречающиеся значения для этих свойств.

Типичная схема: 1. Запрос с указанием свойств фасетов. 1. Отображение результатов поиска и фасетирования. 1. Пользователь выбирает значения фасетов. 1. Повторение запроса с фильтром на основе выбранных значений.

Результаты фасетного поиска с использованием целочисленных полей

Пометьте целочисленное свойство как параметр для фасетной фильтрации, чтобы уточнить результаты по диапазонам (например, "100-200" страниц). Установите isFacetable в true и определите параметры группировки по умолчанию в схеме.

Поиск результатов по размеру документа или дате.

Используйте зарезервированные операторы :

  • itemsize : размер файла в байтах.
  • createddatetimestamp : дата создания.
  • lastmodified : дата изменения.

Добавить предложения

Используйте API подсказок для автозаполнения на основе истории запросов, контактов и содержимого документа.