Структурируйте схему для оптимальной интерпретации запроса

Функция интерпретации запросов Cloud Search автоматически преобразует операторы и фильтры в запросе пользователя в структурированный запрос на основе операторов. Для определения цели запроса используются операторы, определенные в схеме и индексированных документах. Это позволяет пользователям искать с минимальным количеством ключевых слов и получать точные результаты.

Представление результатов зависит от уровня достоверности . Достоверность повышается, когда поисковые запросы последовательно встречаются в определенных полях схемы (например, "Том Хэнкс" в поле " actors "). Достоверность снижается, когда строки встречаются в общем тексте. Высокий уровень достоверности отображает только интерпретированные результаты, тогда как низкий уровень достоверности смешивает их со стандартными результатами по ключевым словам.

Пример интерпретации запроса

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

Обзор интерпретации запросов
Рисунок 1. Интерпретация запроса.

В данном примере используется интерпретация запроса:

  • Определяет по схеме, что объекты верхнего уровня имеют objecttype:movies .
  • Сканирует документы для определения места, где происходит «действие». Если оно преимущественно встречается в genre поле, повышается уверенность в том, что это значение свойства для этого поля.

В результате получается следующая интерпретация: actor:"tom hanks" genre:action objecttype:movies

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

Структурируйте свою схему для интерпретации запросов.

Оптимизация вашей схемы гарантирует, что вы получите выгоду от интерпретации запросов.

Включить интерпретацию отображаемых имен

Интерпретация запросов использует objectDefinitions и propertyDefinitions для интерпретации запросов. Создавайте интуитивно понятные отображаемые имена, используя displayLabel для свойств, objectDisplayLabel для объектов и operatorName для операторов.

В этом примере показаны интуитивно понятные имена для отображения объекта «фильм»:

{
  "objectDefinitions": [{
    "name": "movie",
    "options": {
      "displayOptions": { "objectDisplayLabel": "Films" }
    },
    "propertyDefinitions": [{
      "name": "genre",
      "isReturnable": true,
      "textPropertyOptions": {
        "operatorOptions": { "operatorName": "genre" }
      },
      "displayOptions": { "displayLabel": "Category" }
    }]
  }]
}

Эти отображаемые имена позволяют интерпретировать их следующим образом:

  • "боевики" -> genre:action object:movies
  • "фильмы в жанре боевик или триллер" -> objecttype:movies genre:(action OR thriller)
  • "фильмы категории комедии" -> genre:comedy objecttype:movies

Включить интерпретацию даты, чисел и сортировки.

Определите значения lessThanOperatorName и greaterThanOperatorName в IntegerOperatorOptions для всех свойств, связанных с датами и числами. Чтобы включить сортировку, установите значение isSortable .

В этом примере доступны следующие опции:

{
  "objectDefinitions": [{
    "propertyDefinitions": [
      {
        "name": "runtime",
        "isSortable": true,
        "integerPropertyOptions": {
          "operatorOptions": {
            "operatorName": "runtime",
            "lessThanOperatorName": "runtimelessthan",
            "greaterThanOperatorName": "runtimegreaterthan"
          }
        }
      },
      {
        "name": "releasedate",
        "isSortable": true,
        "datePropertyOptions": {
          "operatorOptions": {
            "operatorName": "releasedate",
            "lessThanOperatorName": "releasedbefore",
            "greaterThanOperatorName": "releasedafter"
          }
        }
      }
    ]
  }]
}

Эти настройки позволяют использовать следующие интерпретации:

  • "фильмы, вышедшие в этом году" -> objecttype:movies releasedafter:2019-1-1 releasedbefore:2019-12-31
  • "фильмы с продолжительностью менее 90" -> objecttype:movies runtimelessthan:90

Включить интерпретацию зарезервированного оператора

Используйте встроенные операторы, такие как type , before , after и objecttype :

  1. Укажите значение updateTime в ItemMetadata , чтобы использовать его before и after .
  2. Укажите mimeType в ItemMetadata для автоматического определения. Например, "action videos" отображает документы с MIME-типами, относящимися к видео.

Ограничения интерпретации запросов

  • Работает только со следующими списками контроля доступа (ACL) для источников данных:
    • Общедоступное доменное имя.
    • Источник данных — общедоступный.
    • Большинство документов имеют одинаковый унаследованный список контроля доступа (ACL).
  • Использование общих имен операторов (например, priority и severity используются значения от 0 до 3) снижает достоверность.
  • По умолчанию при интерпретации значения полей используются в нижнем регистре, если только вы не используете exactMatchWithOperator .
  • Оператор source не поддерживается.
  • Сочетание операторов и терминов свободного текста (например, "p0 cases severity:s0") не интерпретируется.
  • Результаты всегда объединяются с результатами, ранжированными по релевантности.