Схема Google Cloud Search — это JSON-структура, которая определяет объекты, свойства и параметры, используемые при индексации и поиске данных. Ваш коннектор контента считывает данные из вашего репозитория и, на основе зарегистрированной схемы, структурирует и индексирует их.
Вы можете создать схему, предоставив объект JSON-схемы в API и зарегистрировав его. Прежде чем индексировать данные, необходимо зарегистрировать объект схемы для каждого репозитория.
В этом документе рассматриваются основы создания схем. Информация о настройке схемы для улучшения качества поиска представлена в разделе «Улучшение качества поиска» .
Создать схему
Ниже приведен список шагов, используемых для создания схемы облачного поиска:
- Определить ожидаемое поведение пользователя
- Инициализировать источник данных
- Создать схему
- Полный пример схемы
- Зарегистрируйте свою схему
- Индексируйте ваши данные
- Проверьте свою схему
- Настройте свою схему
Определить ожидаемое поведение пользователя
Прогнозирование типов запросов, которые делают ваши пользователи, помогает определить стратегию создания вашей схемы.
Например, при выполнении запросов к базе данных фильмов вы можете ожидать, что пользователь сделает запрос типа «Показать все фильмы с Робертом Редфордом в главной роли». Поэтому ваша схема должна поддерживать результаты запросов по критерию «все фильмы с определённым актёром».
Чтобы определить схему, отражающую поведенческие модели ваших пользователей, рассмотрите возможность выполнения следующих задач:
- Оцените разнообразный набор желаемых запросов от разных пользователей.
- Определите объекты, которые могут использоваться в запросах. Объекты — это логические наборы связанных данных, например, фильм в базе данных фильмов.
- Определите свойства и значения, составляющие объект и которые могут использоваться в запросах. Свойства — это индексируемые атрибуты объекта; они могут включать примитивные значения или другие объекты. Например, объект фильма может иметь такие примитивные значения, как название фильма и дата выхода. Объект фильма может также содержать другие объекты, например, актёров, которые имеют собственные свойства, такие как имя или роль.
- Приведите примеры допустимых значений для свойств. Значения — это фактические данные, индексированные для свойства. Например, название фильма в вашей базе данных может быть «Индиана Джонс: В поисках утраченного ковчега».
- Определите параметры сортировки и ранжирования, необходимые вашим пользователям. Например, при поиске фильмов пользователи могут захотеть сортировать их в хронологическом порядке и по рейтингу аудитории, а не в алфавитном порядке по названию.
- (необязательно) Подумайте, представляет ли одно из ваших свойств более конкретный контекст, в котором может выполняться поиск, например, должность или отдел пользователя, чтобы можно было предлагать варианты автозаполнения на основе этого контекста. Например, при поиске в базе данных фильмов пользователи могут интересоваться только определённым жанром. Пользователи могут указать, какой жанр они хотят получить в результатах поиска, возможно, в своём профиле. Тогда, когда пользователь начнёт вводить запрос о фильмах, в качестве вариантов автозаполнения будут предлагаться только фильмы в предпочитаемом им жанре, например, «боевики».
- Составьте список этих объектов, свойств и примеров значений, которые можно использовать при поиске. (Подробнее об использовании этого списка см. в разделе «Определение параметров оператора» .)
Инициализируйте свой источник данных
Источник данных представляет собой данные из репозитория, проиндексированные и сохранённые в Google Cloud. Инструкции по инициализации источника данных см. в разделе Управление сторонними источниками данных .
Результаты поиска пользователя возвращаются из источника данных. Когда пользователь нажимает на результат поиска, Cloud Search перенаправляет его к нужному элементу, используя URL-адрес, указанный в запросе на индексацию.
Определите свои объекты
Фундаментальной единицей данных в схеме является объект , также называемый « объектом схемы », представляющий собой логическую структуру данных. В базе данных фильмов одной из логических структур данных является «фильм». Другим объектом может быть «персона», представляющий актёрский состав и съёмочную группу, участвовавшую в создании фильма.
Каждый объект в схеме имеет ряд свойств или атрибутов, которые его описывают, например, название и продолжительность фильма или имя и дата рождения человека. Свойства объекта могут включать примитивные значения или другие объекты.
На рисунке 1 показаны объекты фильма и человека, а также связанные с ними свойства.

Схема Cloud Search по сути представляет собой список операторов определения объектов, заданных в теге objectDefinitions
. В следующем фрагменте схемы показаны операторы objectDefinitions
для объектов схем movie и person.
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
При определении объекта схемы вы указываете name
объекта, которое должно быть уникальным среди всех других объектов схемы. Обычно используется значение name
, описывающее объект, например, movie
для объекта фильма. Служба схемы использует поле name
в качестве ключевого идентификатора для индексируемых объектов. Подробнее о поле name
см. в разделе «Определение объекта» .
Определить свойства объекта
Как указано в справочнике по ObjectDefinition , за именем объекта следует набор options
и список параметров propertyDefinitions
. options
могут также включать параметры freshnessOptions
и displayOptions
. Параметры freshnessOptions
используются для корректировки рейтинга поиска в зависимости от новизны элемента. Параметры displayOptions
определяют, будут ли отображаться определённые метки и свойства объекта в результатах поиска.
В разделе propertyDefinitions
определяются свойства объекта, такие как название фильма и дата выхода.
В следующем фрагменте показан объект movie
с двумя свойствами: movieTitle
и releaseDate
.
{
"objectDefinitions": [
{
"name": "movie",
"propertyDefinitions": [
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
{
"name": "releaseDate",
"isReturnable": true,
"isSortable": true,
"datePropertyOptions": {
"operatorOptions": {
"operatorName": "released",
"lessThanOperatorName": "releasedbefore",
"greaterThanOperatorName": "releasedafter"
}
},
"displayOptions": {
"displayLabel": "Release date"
}
...
]
}
]
}
PropertyDefinition состоит из следующих элементов:
- строка
name
. - Список не зависящих от типа параметров, таких как
isReturnable
в предыдущем фрагменте. - Тип и связанные с ним специфичные для типа параметры, такие как
textPropertyOptions
иretrievalImportance
в предыдущем фрагменте. -
operatorOptions
описывающий, как свойство используется в качестве оператора поиска. - Один или несколько
displayOptions
, напримерdisplayLabel
в предыдущем фрагменте.
name
свойства должно быть уникальным в пределах содержащего его объекта, но это же имя может использоваться в других объектах и подобъектах. На рисунке 1 название и дата выхода фильма определены дважды: один раз в объекте movie
и ещё раз в подобъекте filmography
объекта « person
. Эта схема повторно использует поле movieTitle
, что позволяет поддерживать два типа поведения поиска:
- Показывать результаты поиска фильмов , когда пользователи ищут название фильма.
- Показывать людям результаты , когда пользователи ищут название фильма, в котором играл актер.
Аналогично схема повторно использует поле releaseDate
, поскольку оно имеет одинаковое значение для двух полей movieTitle
.
При разработке собственной схемы учтите, что в вашем репозитории могут быть связанные поля, содержащие данные, которые вы хотите объявить в схеме более одного раза.
Добавить независимые от типа параметры
В PropertyDefinition перечислены общие параметры функциональности поиска, общие для всех свойств независимо от типа данных.
-
isReturnable
— указывает, идентифицирует ли свойство данные, которые должны быть возвращены в результатах поиска через API запросов. Все свойства фильма в примере являются возвращаемыми. Невозвращаемые свойства могут использоваться для поиска или ранжирования результатов без возврата их пользователю. -
isRepeatable
— указывает, допустимы ли для свойства несколько значений. Например, у фильма только одна дата выхода, но в нём может быть несколько актёров. -
isSortable
— указывает, что свойство можно использовать для сортировки. Это не относится к повторяющимся свойствам. Например, результаты поиска фильмов могут быть отсортированы по дате выхода или рейтингу аудитории. -
isFacetable
— указывает, что свойство может использоваться для генерации фасетов (fasets) . Фасет используется для уточнения результатов поиска, при этом пользователь видит исходные результаты, а затем добавляет критерии, или фасеты, для дальнейшего уточнения этих результатов. Этот параметр не может быть true для свойств типа object, и для установки этого параметра необходимо, чтобыisReturnable
был true. Наконец, этот параметр поддерживается только для свойств enum, boolean и text. Например, в нашем примере схемы мы можем сделать фасетамиgenre
,actorName
,userRating
иmpaaRating
, чтобы использовать их для интерактивного уточнения результатов поиска. -
isWildcardSearchable
указывает, что пользователи могут выполнять поиск по подстановочным знакам для этого свойства. Эта опция доступна только для текстовых свойств. Принцип работы поиска по подстановочным знакам в текстовом поле зависит от значения, заданного в поле exactMatchWithOperator . ЕслиexactMatchWithOperator
имеет значениеtrue
, текстовое значение разбивается на лексемы как одно атомарное значение, и для него выполняется поиск по подстановочным знакам. Например, если текстовое значение —science-fiction
, то ему соответствует подстановочный запросscience-*
. ЕслиexactMatchWithOperator
имеет значениеfalse
, текстовое значение разбивается на лексемы, и для каждого токена выполняется поиск по подстановочным знакам. Например, если текстовое значение — «science-fiction», то подстановочные запросыsci*
илиfi*
соответствуют элементу, ноscience-*
— нет.
Все эти общие параметры функциональности поиска являются логическими значениями; все они имеют значение по умолчанию false
и должны быть установлены на true
для использования.
В следующей таблице показаны логические параметры, которым присвоено значение true
для всех свойств объекта movie
:
Свойство | isReturnable | isRepeatable | isSortable | isFacetable | isWildcardSearchable |
---|---|---|---|---|---|
movieTitle | истинный | истинный | |||
releaseDate | истинный | истинный | |||
genre | истинный | истинный | истинный | ||
duration | истинный | ||||
actorName | истинный | истинный | истинный | истинный | |
userRating | истинный | истинный | |||
mpaaRating | истинный | истинный |
Для свойств genre
и actorName
свойство isRepeatable
установлено в true
, поскольку фильм может относиться к нескольким жанрам и, как правило, в нём присутствует несколько актёров. Свойство не может быть сортируемым, если оно повторяется или содержится в повторяющемся подобъекте.
Определить тип
В справочном разделе PropertyDefinition перечислены несколько xxPropertyOptions
, где xx
— это конкретный тип данных, например, boolean
. Чтобы задать тип данных свойства, необходимо определить соответствующий объект типа данных. Определение объекта типа данных для свойства устанавливает тип данных этого свойства. Например, определение textPropertyOptions
для свойства movieTitle
указывает, что название фильма имеет текстовый тип. В следующем фрагменте показано свойство movieTitle
с textPropertyOptions
, задающим тип данных.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
Свойство может иметь только один связанный тип данных. Например, в нашей схеме фильма releaseDate
может быть только датой (например, 2016-01-13
) или строкой (например, January 13, 2016
), но не обоими сразу.
Ниже приведены объекты типов данных, используемые для указания типов данных для свойств в схеме примера фильма:
Свойство | Объект типа данных |
---|---|
movieTitle | textPropertyOptions |
releaseDate | datePropertyOptions |
genre | enumPropertyOptions |
duration | textPropertyOptions |
actorName | textPropertyOptions |
userRating | integerPropertyOptions |
mpaaRating | textPropertyOptions |
Тип данных, который вы выбираете для свойства, зависит от ожидаемых вариантов использования. В предполагаемом сценарии этой схемы фильма предполагается, что пользователи захотят сортировать результаты в хронологическом порядке, поэтому releaseDate
— это объект даты. Например, если предполагается сравнение декабрьских релизов разных лет с январскими, то строковый формат может быть полезен.
Настройте параметры, специфичные для типа
В справочном разделе PropertyDefinition приведены ссылки на параметры для каждого типа. Большинство параметров, специфичных для типа, необязательны, за исключением списка possibleValues
в enumPropertyOptions
. Кроме того, параметр orderedRanking
позволяет ранжировать значения относительно друг друга. В следующем фрагменте показано свойство movieTitle
с параметром textPropertyOptions
, устанавливающим тип данных, и параметром retrievalImportance
, специфичным для типа.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
...
},
...
}
Вот дополнительные типоспецифичные параметры, используемые в примере схемы:
Свойство | Тип | Типоспецифичные опции |
---|---|---|
movieTitle | textPropertyOptions | retrievalImportance |
releaseDate | datePropertyOptions | |
genre | enumPropertyOptions | |
duration | textPropertyOptions | |
actorName | textPropertyOptions | |
userRating | integerPropertyOptions | orderedRanking , maximumValue |
mpaaRating | textPropertyOptions |
Определить параметры оператора
Помимо специфичных для типа параметров, каждый тип имеет набор необязательных operatorOptions
Эти параметры описывают, как свойство используется в качестве оператора поиска. В следующем фрагменте показано свойство movieTitle
с textPropertyOptions
, задающим тип данных, и с специфичными для типа параметрами retrievalImportance
и operatorOptions
.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
...
}
У каждого operatorOptions
есть operatorName
, например, title
для movieTitle
. Имя оператора — это оператор поиска для свойства. Оператор поиска — это фактический параметр, который пользователи будут использовать при сужении поиска. Например, чтобы найти фильмы по названию, пользователь должен ввести title:movieName
, где movieName
— название фильма.
Имена операторов не обязательно должны совпадать с именем свойства. Вместо этого следует использовать имена операторов, отражающие наиболее распространённые слова, используемые пользователями в вашей организации. Например, если пользователи предпочитают использовать слово «name» вместо «title» для названия фильма, то имя оператора следует задать как «name».
Вы можете использовать одно и то же имя оператора для нескольких свойств, при условии, что все свойства имеют один и тот же тип. При использовании общего имени оператора в запросе извлекаются все свойства, использующие это имя. Например, предположим, что у объекта movie есть свойства plotSummary
и plotSynopsis
, и у каждого из этих свойств есть свойство operatorName
, равное plot
. Если оба этих свойства являются текстовыми ( textPropertyOptions
), один запрос с использованием оператора поиска plot
извлечет их оба.
Помимо operatorName
, сортируемые свойства могут иметь поля lessThanOperatorName
и greaterThanOperatorName
в operatorOptions
. Пользователи могут использовать эти параметры для создания запросов на основе сравнений с отправленным значением.
Наконец, в textOperatorOptions
есть поле exactMatchWithOperator
в operatorOptions
. Если значение exactMatchWithOperator
равно true
, строка запроса должна полностью соответствовать значению свойства, а не просто встречаться в тексте. Текстовое значение будет рассматриваться как одно атомарное значение при поиске операторов и сопоставлении фасетов.
Например, рассмотрим индексацию объектов «Книга» или «Фильм» со свойствами жанра. Жанры могут включать «Научная фантастика», «Наука» и «Художественная литература». Если exactMatchWithOperator
установлен в false
или опущен, поиск по жанру или выбор фасета «Наука» или «Художественная литература» также вернет результаты для «Научная фантастика», поскольку текст размечен, и токены «Наука» и «Художественная литература» присутствуют в «Научной фантастике». Если exactMatchWithOperator
установлен в true
, текст рассматривается как один токен, поэтому ни «Наука», ни «Художественная литература» не соответствуют «Научной фантастике».
(Необязательно) Добавьте раздел displayOptions
В конце любого раздела propertyDefinition
есть необязательный раздел displayOptions
. Этот раздел содержит одну строку displayLabel
. displayLabel
— это рекомендуемая, удобная для пользователя текстовая метка для свойства. Если свойство настроено для отображения с помощью ObjectDisplayOptions , эта метка отображается перед свойством. Если свойство настроено для отображения, а displayLabel
не определен, отображается только значение свойства.
В следующем фрагменте показано свойство movieTitle
со свойством displayLabel
, для которого установлено значение «Title».
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
"displayOptions": {
"displayLabel": "Title"
}
},
Ниже приведены значения displayLabel
для всех свойств объекта movie
в примере схемы:
Свойство | displayLabel |
---|---|
movieTitle | Title |
releaseDate | Release date |
genre | Genre |
duration | Run length |
actorName | Actor |
userRating | Audience score |
mpaaRating | MPAA rating |
(Необязательно) Добавьте раздел suggestionFilteringOperators[]
В конце любого раздела propertyDefinition
есть необязательный раздел suggestionFilteringOperators[]
. Используйте этот раздел, чтобы определить свойство, используемое для фильтрации предложений автозаполнения. Например, можно определить оператор genre
для фильтрации предложений на основе предпочитаемого пользователем жанра фильмов. Тогда при вводе пользователем поискового запроса в предложениях автозаполнения будут отображаться только фильмы, соответствующие предпочитаемому им жанру.
Зарегистрируйте свою схему
Чтобы получать структурированные данные по запросам Cloud Search, необходимо зарегистрировать схему в сервисе схем Cloud Search. Для регистрации схемы требуется идентификатор источника данных, полученный на этапе инициализации источника данных .
Используя идентификатор источника данных, отправьте запрос UpdateSchema для регистрации вашей схемы.
Как подробно описано на справочной странице UpdateSchema , выполните следующий HTTP-запрос для регистрации вашей схемы:
PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema
Текст вашего запроса должен содержать следующее:
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
Используйте опцию validateOnly
для проверки корректности вашей схемы без ее фактической регистрации.
Индексируйте ваши данные
После регистрации схемы заполните источник данных с помощью вызовов Index . Индексация обычно выполняется внутри коннектора контента .
При использовании схемы фильма запрос на индексацию REST API для одного фильма будет выглядеть следующим образом:
{
"name": "datasource/<data_source_id>/items/titanic",
"acl": {
"readers": [
{
"gsuitePrincipal": {
"gsuiteDomain": true
}
}
]
},
"metadata": {
"title": "Titanic",
"sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
"objectType": "movie"
},
"structuredData": {
"object": {
"properties": [
{
"name": "movieTitle",
"textValues": {
"values": [
"Titanic"
]
}
},
{
"name": "releaseDate",
"dateValues": {
"values": [
{
"year": 1997,
"month": 12,
"day": 19
}
]
}
},
{
"name": "actorName",
"textValues": {
"values": [
"Leonardo DiCaprio",
"Kate Winslet",
"Billy Zane"
]
}
},
{
"name": "genre",
"enumValues": {
"values": [
"Drama",
"Action"
]
}
},
{
"name": "userRating",
"integerValues": {
"values": [
8
]
}
},
{
"name": "mpaaRating",
"textValues": {
"values": [
"PG-13"
]
}
},
{
"name": "duration",
"textValues": {
"values": [
"3 h 14 min"
]
}
}
]
}
},
"content": {
"inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
"contentFormat": "TEXT"
},
"version": "01",
"itemType": "CONTENT_ITEM"
}
Обратите внимание, как значение movie
в поле objectType
совпадает с именем определения объекта в схеме. Сопоставляя эти два значения, Cloud Search определяет, какой объект схемы использовать при индексации.
Также обратите внимание, что индексация свойства схемы releaseDate
использует подсвойства year
, month
и day
, которые оно наследует, поскольку оно определено как тип данных date
с помощью datePropertyOptions
. Однако, поскольку year
, month
и day
не определены в схеме, вы не можете выполнить запрос по одному из этих свойств (например, year
) по отдельности.
А также обратите внимание, как повторяющееся свойство actorName
индексируется с помощью списка значений.
Выявление потенциальных проблем индексации
Две наиболее распространенные проблемы, связанные со схемами и индексацией:
Ваш запрос на индексацию содержит имя объекта схемы или свойства, которое не зарегистрировано в службе схем. Эта проблема приводит к игнорированию свойства или объекта.
В вашем запросе на индексацию есть свойство с типом, отличным от типа, зарегистрированного в схеме. Эта проблема приводит к тому, что Cloud Search возвращает ошибку во время индексации.
Проверьте свою схему с помощью нескольких типов запросов.
Прежде чем регистрировать схему для большого производственного репозитория данных, рассмотрите возможность тестирования с использованием меньшего тестового репозитория данных. Тестирование с меньшим тестовым репозиторием позволяет быстро вносить изменения в схему и удалять индексированные данные, не затрагивая более крупный индекс или существующий производственный индекс. Для тестового репозитория данных создайте список контроля доступа (ACL), который авторизует только тестового пользователя, чтобы другие пользователи не видели эти данные в результатах поиска.
Чтобы создать поисковый интерфейс для проверки поисковых запросов, обратитесь к разделу Интерфейс поиска.
В этом разделе содержится несколько примеров запросов, которые вы можете использовать для тестирования схемы фильма.
Тест с помощью общего запроса
Универсальный запрос возвращает все элементы в источнике данных, содержащие определённую строку. Используя интерфейс поиска, вы можете выполнить универсальный запрос к источнику данных о фильмах, введя слово «Титаник» и нажав клавишу Enter . Все фильмы со словом «Титаник» должны быть возвращены в результатах поиска.
Тест с оператором
Добавление оператора к запросу ограничивает результаты элементами, соответствующими его значению. Например, оператор actor
может быть полезен для поиска всех фильмов с определённым актёром. Используя интерфейс поиска, можно выполнить запрос с этим оператором, просто введя пару «оператор=значение» , например, «актёр:Зейн» , и нажав клавишу Enter . В результатах поиска должны быть отображены все фильмы, где Зейн — актёр.
Настройте свою схему
После того, как ваша схема и данные начнут использоваться, продолжайте отслеживать, что работает, а что нет для ваших пользователей. Вам следует рассмотреть возможность корректировки схемы в следующих ситуациях:
- Индексирование поля, которое ранее не индексировалось. Например, ваши пользователи могут многократно искать фильмы по имени режиссёра, поэтому вы можете настроить схему так, чтобы она поддерживала имя режиссёра в качестве оператора.
- Изменение названий операторов поиска на основе отзывов пользователей. Названия операторов должны быть удобными для пользователей. Если ваши пользователи постоянно «запоминают» неправильное название оператора, вам стоит подумать о его изменении.
Переиндексация после изменения схемы
Изменение любого из следующих значений в вашей схеме не требует переиндексации данных. Вы можете просто отправить новый запрос UpdateSchema , и ваш индекс продолжит функционировать:
- Имена операторов.
- Целочисленные минимальные и максимальные значения.
- Целочисленный и перечисленный упорядоченный ранжирование.
- Варианты свежести.
- Параметры отображения.
При следующих изменениях ранее проиндексированные данные продолжат работать в соответствии с ранее зарегистрированной схемой. Однако, если в ней есть эти изменения, вам необходимо переиндексировать существующие записи, чтобы увидеть изменения на основе обновлённой схемы:
- Добавление или удаление нового свойства или объекта
- Изменение
isReturnable
,isFacetable
илиisSortable
сfalse
наtrue
.
Устанавливать isFacetable
или isSortable
в значение true
следует только в том случае, если у вас есть четкий вариант использования и потребность.
Наконец, когда вы обновляете схему, отмечая свойство isSuggestable
, вам приходится переиндексировать данные, что приводит к задержке в использовании автозаполнения для этого свойства.
Запрещенные изменения свойств
Некоторые изменения схемы не допускаются, даже если вы переиндексируете данные, поскольку они нарушат работу индекса или приведут к неудовлетворительным или непоследовательным результатам поиска. К ним относятся:
- Тип данных свойства.
- Имя объекта.
- Настройка
exactMatchWithOperator
. - Настройка
retrievalImportance
.
Однако есть способ обойти это ограничение.
Внести сложное изменение схемы
Чтобы избежать изменений, которые могут привести к неудовлетворительным результатам поиска или некорректному индексу, Cloud Search предотвращает определённые изменения в запросах UpdateSchema после индексации репозитория. Например, тип данных или имя свойства нельзя изменить после их установки. Эти изменения невозможно выполнить с помощью простого запроса UpdateSchema , даже если вы переиндексируете данные.
В ситуациях, когда необходимо внести в схему запрещённое изменение, часто можно внести ряд разрешённых изменений, достигающих того же эффекта. Как правило, это включает в себя сначала миграцию индексированных свойств из старого определения объекта в новое, а затем отправку запроса на индексацию, использующего только новое свойство.
Следующие шаги показывают, как изменить тип данных или имя свойства:
- Добавьте новое свойство в определение объекта в схеме. Используйте имя, отличное от имени свойства, которое вы хотите изменить.
- Отправьте запрос UpdateSchema с новым определением. Не забудьте отправить в запросе всю схему, включая как новое, так и старое свойство.
Выполните обратное заполнение индекса из репозитория данных. Для обратного заполнения индекса отправляйте все запросы на индексацию, используя новое свойство, а не старое, так как это приведёт к двойному учёту совпадений запроса.
- Во время индексации обратного заполнения проверьте наличие нового свойства и используйте по умолчанию старое свойство, чтобы избежать несогласованного поведения.
- После завершения обратного заполнения выполните тестовые запросы для проверки.
Удалите старое свойство. Выполните ещё один запрос UpdateSchema без старого имени свойства и прекратите использовать старое имя свойства в будущих запросах на индексацию.
Перенесите все использования старого свойства в новое. Например, если вы меняете имя свойства с creator на author, необходимо обновить код запроса, чтобы использовать author там, где ранее он ссылался на creator.
Cloud Search хранит информацию о любом удалённом свойстве или объекте в течение 30 дней, чтобы защитить его от повторного использования, которое может привести к непредвиденным результатам индексации. В течение этих 30 дней вам следует полностью отказаться от использования удалённого объекта или свойства, включая исключение их из будущих запросов на индексирование. Это гарантирует, что если вы впоследствии решите восстановить это свойство или объект, вы сможете сделать это, сохранив корректность индекса.
Знайте ограничения по размеру
Cloud Search накладывает ограничения на размер структурированных объектов данных и схем. Эти ограничения следующие:
- Максимальное количество объектов верхнего уровня — 10 объектов.
- Максимальная глубина иерархии структурированных данных составляет 10 уровней.
- Общее количество полей в объекте ограничено 1000, что включает количество примитивных полей плюс сумму количества полей в каждом вложенном объекте.
Следующие шаги
Вот несколько следующих шагов, которые вы можете предпринять:
Создайте поисковый интерфейс для проверки вашей схемы.
Настройте свою схему, чтобы улучшить качество поиска .
Узнайте, как использовать схему
_dictionaryEntry
для определения синонимов терминов, часто используемых в вашей компании. Чтобы использовать схему_dictionaryEntry
, см. раздел Определение синонимов .Создайте соединитель .