Функция интерпретации запросов Cloud Search автоматически интерпретирует операторы и фильтры в запросе пользователя и преобразует эти элементы в структурированный запрос на основе операторов. Интерпретация запросов использует операторы, определённые в схеме, вместе с проиндексированными документами, чтобы определить значение запроса пользователя. Эта функция позволяет пользователю выполнять поиск с минимальным количеством ключевых слов, получая при этом точные результаты.
Фактические результаты, представленные пользователю, зависят от достоверности интерпретации запроса. Достоверность основана на нескольких факторах, в том числе на том, где строки запроса появляются в индексированных документах. Строка, например, имя актёра «Том Хэнкс», постоянно встречающаяся в поле схемы actors
, приводит к более высокой достоверности. Появление той же строки («Том Хэнкс») в абзаце, а не в поле схемы, может привести к более низкой достоверности. В случае высокой достоверности пользователю отображаются только результаты интерпретации запроса. В случае низкой достоверности результаты интерпретации запроса смешиваются с обычными результатами поиска по ключевым словам.
Пример интерпретации запроса
Предположим, у вас есть источник данных, например, база данных, содержащая информацию о фильмах. На рисунке 1 показан пример поискового запроса и его интерпретация.

Учитывая этот пример запроса, интерпретация запроса выполняет следующие действия:
Анализирует схему и определяет, что объекты верхнего уровня в источнике данных классифицируются как
objecttype:movies
. Интерпретация запроса теперь определяет, что «movies» в запросе — это тип объекта.Сканирует документы в источнике данных совместно со схемой, чтобы определить, где встречается строка «action». Если строка встречается преимущественно в поле источника данных с типом «genre», то интерпретация запроса уверена, что «action» — это значение свойства «genre», как определено в схеме. Если строка встречается преимущественно в контексте абзацев контента, то уровень уверенности интерпретации запроса снижается.
Результирующая интерпретация запроса:
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"
}
},
...
]
}
]
}
В предыдущем примере:
Определение объекта фильма имеет
objectDisplayLabel
«Фильм».Свойство жанраDefinition имеет
operatorName
«жанр»Name и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
. - Свойство
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
для улучшения интерпретации запроса. При индексации документа выполните следующие действия:
Заполните поле
updateTime
вItemMetadata
, чтобы использовать операторыbefore
иafter
. Эти настройки позволяют Cloud Search интерпретировать запросы следующим образом:- «Фильмы прошлой недели» — будут перечислены все фильмы, которые были обновлены в индексе на предыдущей неделе.
- «Фильмы до января 2019 г.» — будут перечислены все фильмы, проиндексированные до января 2019 г.
Заполните поле
mimeType
вItemMetadata
, чтобы использовать автоматическое определение типа. Запрос «видео боевиков» выведет список всех документов с боевиками с типом MIMEapplication/mp4
,application/mpeg4
,application/x-shockwave-flash
,video/
иapplication/vnd.google-apps.video
.
Ограничения интерпретации запроса
Функция интерпретации запроса имеет следующие ограничения.
- Интерпретация запросов работает только для следующих списков ACL источников данных:
- Все документы являются общедоступными в домене (доступ к ним имеют все пользователи домена).
- Все документы являются общедоступными источниками данных (доступны всем, у кого есть доступ к списку контроля доступа источника данных).
- Большинство документов в источнике данных имеют одинаковый ACL (все документы наследуют ACL от одного и того же элемента контейнера) без определения дополнительных читателей.
- Если несколько операторов схемы имеют одинаковое значение, интерпретация этого значения в соответствии с намерением оператора запроса зависит от общего коэффициента достоверности, возвращаемого системой интерпретации запроса. Например, предположим, что у вас есть свойства
priority
иseverity
с одинаковыми именами операторов, определенными в схеме. Допустим, оба оператора могут иметь значения 0, 1, 2 или 3. В этом примере «0» в запросе может относиться к значению оператора какpriority
, так иseverity
. Эти значения неоднозначны, и уровень достоверности ниже. - По умолчанию при интерпретации запросов Cloud Search понижает регистр значений полей при интерпретации запроса, за исключением текстовых операторов, определенных с помощью параметров
exactMatchWithOperator
. - Оператор
source
не поддерживается в запросах. - Запросы, сочетающие термины с операторами и свободные текстовые термины, не интерпретируются. Например, запрос «p0 priority cases serious:s0» не будет поддерживаться, поскольку «p0 priority cases» — это свободный текстовый термин, а «severity:s0» — термин с операторами.
- Стратегия интерпретации запроса всегда объединяет интерпретированные результаты с обычными (неинтерпретированными, ранжированными по релевантности) результатами. Она не выполняет полную замену результатов на странице.