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

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

Фактические результаты, представленные пользователю, зависят от достоверности интерпретации запроса. Уверенность зависит от нескольких факторов, в том числе от того, где строки запроса появляются в индексированных документах. Строка, такая как имя актера «Том Хэнкс», постоянно появляющаяся в поле схемы, называемом actors , обеспечивает более высокую достоверность. Одна и та же строка («Том Хэнкс»), появляющаяся внутри абзаца, а не в поле схемы, может привести к снижению достоверности. В случае высокой достоверности пользователю отображаются только результаты интерпретации запроса. В случае более слабой достоверности результаты интерпретации запроса смешиваются с обычными результатами поиска по ключевым словам.

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

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

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

В этом примере запроса интерпретация запроса выполняет следующие действия:

  • Анализирует схему и определяет, что объекты верхнего уровня в источнике данных классифицируются как objecttype:movies . Интерпретация запроса теперь знает, что «фильмы» в запросе являются типом объекта.

  • Сканирует документы в источнике данных вместе со схемой, чтобы определить, где встречается строка «действие». Если строка в основном встречается в определенном поле источника данных «жанр», то интерпретация запроса уверена, что «действие» является значением свойства для свойства «жанр», как определено в схеме. Если строка в основном встречается в контексте абзацев содержимого, уровень достоверности интерпретации запроса снижается.

Итоговая интерпретация запроса:

  actor:“tom hanks” genre:action objecttype:movies

Интерпретация запросов автоматически включается для всех клиентов Cloud Search без каких-либо дополнительных действий. Однако для оптимальной интерпретации запроса вам следует структурировать свою схему в соответствии с инструкциями в этом документе.

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

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

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

Интерпретация запроса Cloud Search использует objectDefinitions и propertyDefinitions в схеме для интерпретации запроса пользователя и настройки результатов. Чтобы получить максимальную выгоду от этих элементов схемы, вам следует создавать интуитивно понятные отображаемые имена, используя displayLabel для имен свойств, objectDisplayLabel для имен объектов operatorName для операторов.

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

{
  "objectDefinitions": [
    {
      "name": "movie",
        "options": {
          "displayOptions": {
          "objectDisplayLabel": "Films"
        }
        ...
      },
      "propertyDefinitions": [
        {
          "name": "genre",
          "isReturnable": true,
          "isRepeatable": true,
          "isFacetable": true,
          "textPropertyOptions": {
          "retrievalImportance": { "importance": "HIGHEST" },
          "operatorOptions": {
            "operatorName": "genre"
          }
        },
        "displayOptions": {
          "displayLabel": "Category"
        }
      },
      ...
      ]
    }
  ]
}

В предыдущем примере:

  • В определении объекта фильма есть объект «Film» objectDisplayLabel .

  • Свойство жанраDefinition имеет имя operatorName «жанр» и displayLabel «Категория».

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

  • «боевики», «жанровые фильмы типа боевик» или «жанровые фильмы боевики» интерпретируются как genre:action object:movies .
  • «фильмы жанра боевик или триллер» интерпретируются как objecttype:movies genre:(action OR thriller) .
  • «боевик» или «боевики» интерпретируются как genre:action objecttype:movies .
  • «Категория комедийных фильмов» интерпретируется как genre:comedy objecttype:movies .

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

Вы должны определить lessThanOperatorName и greaterThanOperatorName , указанные в IntegerOperatorOptions , для всех дат и числовых свойств. Эти настройки включают автоматическую дату и числовую интерпретацию. Кроме того, чтобы включить интерпретацию сортировки, установите параметр isSortable для дат и числовых свойств. Следующая схема показывает, как включить эти параметры.

{
  "objectDefinitions": [
    {
      "options": {
        "displayOptions": {
          "objectDisplayLabel": "Films"
        }
      },
      "propertyDefinitions": [
        {
          "name": "runtime",
          "isReturnable": true,
          "isSortable": true,
          "integerPropertyOptions": {
            "orderedRanking": "DESCENDING",
            "minimumValue": {
              "value": 10
            },
            "maximumValue": {
              "value": 500
            },
            "operatorOptions": {
              "operatorName": "runtime",
              "lessThanOperatorName": "runtimelessthan",
              "greaterThanOperatorName": "runtimegreaterthan"
            }
          },
          "displayOptions": {
            "displayLabel": "Length"
          }
        },
        {
          "name": "releasedate",
          "isReturnable": true,
          "isSortable": true,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "releasedate",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          }
        }
      ]
    }
  ]
}

В предыдущем примере:

  • runtime числового свойства относится к продолжительности фильма. Для этого свойства установлены значения runtimelessthan и runtimegreaterthan .
  • Свойство date releaseDate относится к дате выхода фильма в кинотеатрах. Для этого свойства установлены значения releasedbefore и releasedafter .

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

  • Предполагая, что год — 2019, «фильмы, выпущенные в этом году» интерпретируются как objecttype: movies releasedafter:2019-1-1 releasedbefore:2019-12-31 .
  • Предполагая, что неделя — третья неделя марта, «фильмы, выпущенные на прошлой неделе» интерпретируются как objecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16
  • «фильмы со временем выполнения менее 90» интерпретируется как objjecttype: movies runtimelessthan:90 .
  • Предполагая, что год — 2019, «фильмы, выпущенные в этом году и продолжительностью более 120», интерпретируются как releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120 .
  • «Сортировать фильмы по дате выпуска» будет фильтроваться по «типу объекта: фильмы», а представленные результаты будут отсортированы по дате выпуска с порядком сортировки по умолчанию по возрастанию.

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

Вы также можете использовать зарезервированные встроенные операторы type , before , after , objecttype для улучшения интерпретации запроса. При индексировании документа выполните следующие действия:

  1. Заполните поле updateTime в ItemMetadata , чтобы использовать операторы before и after . Эти настройки позволяют Cloud Search выполнять следующие интерпретации запросов:

    • «Фильмы прошлой недели» будут включать в себя все фильмы, которые были обновлены в индексе на предыдущей неделе.
    • «Фильмы до января 2019 года» будут перечислять все фильмы, которые были проиндексированы до января 2019 года.
  2. Заполните поле mimeType в ItemMetadata , чтобы использовать автоматическое определение типа. В запросе «боевики» будут перечислены все документы боевиков с mime-типом application/mp4 , application/mpeg4 , application/x-shockwave-flash , video/ и application/vnd.google-apps.video .

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

Функция интерпретации запроса имеет следующие ограничения.

  • Интерпретация запроса работает только для следующих ACL источников данных:
    • Все документы являются общедоступными для домена (доступ к ним имеют все пользователи домена).
    • Все документы являются общедоступными источниками данных (все, у кого есть доступ к ACL источника данных).
    • Большинство документов в источнике данных имеют один и тот же список ACL (все документы наследуют ACL от одного и того же элемента контейнера) без определенных дополнительных читателей.
  • Если несколько операторов схемы имеют одно и то же значение, интерпретация этого значения в соответствии с намерением оператора для запроса зависит от общего коэффициента достоверности, возвращаемого системой интерпретации запроса. Например, предположим, что у вас есть свойства priority и severity с теми же именами операторов, которые определены в схеме. Допустим, оба оператора могут иметь значения 0, 1, 2 или 3. В этом примере «0» в запросе может относиться к значению оператора либо для priority , либо severity . Эти значения неоднозначны, а уровень достоверности ниже.
  • По умолчанию интерпретация запроса Cloud Search уменьшает регистр значений полей при интерпретации запроса, за исключением тех текстовых операторов, которые определены с помощью параметров exactMatchWithOperator .
  • Оператор source не поддерживается в запросах.
  • Запросы, сочетающие термины на основе операторов и термины произвольного текста, не интерпретируются. Например, запрос «Серьезность случаев с приоритетом p0: s0» не будет поддерживаться, поскольку «случаи с приоритетом p0» — это свободный текстовый термин, а «серьезность: s0» — это термин, основанный на операторе.
  • Стратегия интерпретации запроса всегда смешивает интерпретированные результаты с обычными (неинтерпретируемыми, ранжированными по релевантности) результатами. Он не выполняет полную замену страницы результатов.