Создать и зарегистрировать схему

Схема Google Cloud Search — это структура JSON, определяющая объекты, свойства и параметры, используемые для индексирования и запросов к вашим данным. Ваш коннектор контента считывает данные из вашего репозитория и, основываясь на зарегистрированной вами схеме, структурирует и индексирует данные.

Вы можете создать схему, предоставив объект JSON-схемы в API, а затем зарегистрировав его. Перед индексацией данных необходимо зарегистрировать объект схемы для каждого из ваших репозиториев.

В этом документе рассматриваются основы создания схемы. Информацию о том, как настроить схему для улучшения качества поиска, см. в разделе «Улучшение качества поиска» .

Создайте схему

Ниже приведён список шагов, необходимых для создания схемы Cloud Search:

  1. Определите ожидаемое поведение пользователей.
  2. Инициализация источника данных
  3. Создайте схему
  4. Полная схема образца
  5. Зарегистрируйте свою схему
  6. Проиндексируйте свои данные
  7. Проверьте свою схему
  8. Настройте свою схему

Определите ожидаемое поведение пользователей.

Прогнозирование типов запросов, которые задают ваши пользователи, помогает определить стратегию создания схемы данных.

Например, при выполнении запросов к базе данных фильмов вы можете ожидать, что пользователь сделает запрос типа «Покажите все фильмы с Робертом Редфордом в главной роли». Следовательно, ваша схема должна поддерживать результаты запросов, основанные на запросе «все фильмы с конкретным актером».

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

  1. Проанализируйте разнообразные запросы от разных пользователей.
  2. Определите объекты, которые могут быть использованы в запросах. Объекты — это логические наборы связанных данных, например, фильм в базе данных фильмов.
  3. Определите свойства и значения, из которых состоит объект и которые могут использоваться в запросах. Свойства — это индексируемые атрибуты объекта; они могут включать примитивные значения или другие объекты. Например, объект «фильм» может иметь такие свойства, как название фильма и дата выхода, в качестве примитивных значений. Объект «фильм» также может содержать другие объекты, такие как актеры, которые имеют свои собственные свойства, такие как имя или роль.
  4. Определите примеры допустимых значений для свойств. Значения — это фактические данные, проиндексированные для свойства. Например, название одного фильма в вашей базе данных может быть «Индиана Джонс и искатели утраченного ковчега».
  5. Определите параметры сортировки и ранжирования, необходимые вашим пользователям. Например, при поиске фильмов пользователи могут захотеть сортировать их в хронологическом порядке и ранжировать по рейтингу зрителей, и им может не потребоваться сортировка по алфавиту по названию.
  6. (необязательно) Рассмотрите возможность добавления в базу данных свойств, отражающих более специфический контекст поиска, например, должность или отдел пользователя, чтобы в зависимости от контекста предоставлялись подсказки автозаполнения. Например, пользователи, ищущие фильмы в базе данных, могут интересоваться только определенным жанром. Пользователи могут указать, какой жанр они хотят видеть в результатах поиска, возможно, в своем профиле. Тогда, когда пользователь начнет вводить запрос о фильмах, в подсказках автозаполнения будут предлагаться только фильмы из предпочитаемого им жанра, например, «боевики».
  7. Составьте список этих объектов, свойств и примеров значений, которые можно использовать в поиске. (Подробнее о том, как используется этот список, см. раздел «Определение параметров оператора» .)

Инициализируйте источник данных.

Источник данных представляет собой данные из хранилища, которые были проиндексированы и сохранены в Google Cloud. Инструкции по инициализации источника данных см. в разделе «Управление сторонними источниками данных» .

Результаты поиска пользователя возвращаются из источника данных. Когда пользователь нажимает на результат поиска, Cloud Search перенаправляет его к нужному элементу, используя URL-адрес, указанный в запросе на индексацию.

Определите ваши объекты

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

Каждый объект в схеме имеет ряд свойств или атрибутов, описывающих этот объект, например, название и продолжительность фильма или имя и дату рождения человека. Свойства объекта могут включать примитивные значения или другие объекты.

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

Построение схемы связей между сущностями
Рисунок 1. Пример схемы, показывающий два объекта и один подобъект.

Схема Cloud Search по сути представляет собой список операторов определения объектов, заданных внутри тега objectDefinitions . Следующий фрагмент схемы показывает операторы objectDefinitions для объектов схем movie и person.

{
  "objectDefinitions": [
    {
      "name": "movie",
      ...
    },
    {
      "name": "person",
      ...
    }
  ]
}

При определении объекта схемы вы указываете name для объекта, которое должно быть уникальным среди всех других объектов в схеме. Обычно используется значение name , описывающее объект, например, movie для объекта 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 — указывает, содержит ли свойство данные, которые должны быть возвращены в результатах поиска через Query API. Все приведенные в примере свойства фильмов являются возвращаемыми. Невозвращаемые свойства могут использоваться для поиска или ранжирования результатов без возврата пользователю.
  • isRepeatable — указывает, допускается ли для свойства несколько значений. Например, у фильма только одна дата выхода, но может быть несколько актеров.
  • isSortable — указывает, что свойство может использоваться для сортировки. Это не может быть так для повторяющихся свойств. Например, результаты поиска фильмов могут быть отсортированы по дате выхода или рейтингу зрителей.
  • isFacetable — указывает, что свойство может использоваться для генерации фасетов . Фасет используется для уточнения результатов поиска, при этом пользователь видит первоначальные результаты, а затем добавляет критерии, или фасеты, для дальнейшего уточнения этих результатов. Этот параметр не может быть истинным для свойств типа object, и isReturnable должен быть истинным, чтобы установить этот параметр. Наконец, этот параметр поддерживается только для свойств типа enum, boolean и text. Например, в нашей схеме мы можем сделать genre , actorName , userRating и mpaaRating фасетными, чтобы разрешить их использование для интерактивного уточнения результатов поиска.
  • isWildcardSearchable указывает, что пользователи могут выполнять поиск с использованием подстановочных знаков для этого свойства. Эта опция доступна только для текстовых свойств. Как работает поиск с использованием подстановочных знаков в текстовом поле, зависит от значения, заданного в поле exactMatchWithOperator . Если exactMatchWithOperator установлено в true , текстовое значение токенизируется как одно атомарное значение, и выполняется поиск с использованием подстановочных знаков. Например, если текстовое значение — science-fiction , запрос с подстановочными знаками science-* будет соответствовать ему. Если exactMatchWithOperator установлено в false , текстовое значение токенизируется, и выполняется поиск с использованием подстановочных знаков для каждого токена. Например, если текстовое значение — "science-fiction", запросы с подстановочными знаками sci* или fi* соответствуют элементу, но science-* не соответствует ему.

Все эти общие параметры функциональности поиска имеют логические значения; по умолчанию они имеют значение false и должны быть установлены в true для использования.

В следующей таблице показаны логические параметры, для всех свойств объекта movie установлено значение true :

Свойство isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle истинный истинный
releaseDate истинный истинный
genre истинный истинный истинный
duration истинный
actorName истинный истинный истинный истинный
userRating истинный истинный
mpaaRating истинный истинный

Для параметров genre и actorName параметр isRepeatable установлен в true поскольку фильм может относиться к нескольким жанрам и обычно имеет более одного актера. Свойство не может быть сортируемым, если оно является повторяемым или содержится в повторяемом подобъекте.

Определить тип

В разделе справочника PropertyDefinition перечислены несколько xxPropertyOptions , где xx — это конкретный тип, например, boolean . Чтобы задать тип данных свойства, необходимо определить соответствующий объект типа данных. Определение объекта типа данных для свойства задает тип данных этого свойства. Например, определение textPropertyOptions для свойства movieTitle указывает, что название фильма имеет тип text. В следующем фрагменте кода показано свойство 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 будет представлять собой объект типа date. Если, например, предполагается сравнение релизов декабря с релизами января, то может быть полезен строковый формат.

Настройте параметры, специфичные для данного типа.

В разделе справочника 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 — это название фильма.

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

Вы можете использовать одно и то же имя оператора для нескольких свойств, если все свойства имеют один и тот же тип. При использовании общего имени оператора в запросе извлекаются все свойства, использующие это имя оператора. Например, предположим, что объект movie имеет свойства plotSummary и plotSynopsis , и каждое из этих свойств имеет operatorName равный plot . Пока оба этих свойства являются текстовыми ( textPropertyOptions ), один запрос с использованием оператора поиска plot извлечет их оба.

Помимо operatorName , свойства, допускающие сортировку, могут иметь поля lessThanOperatorName и greaterThanOperatorName в operatorOptions . Пользователи могут использовать эти параметры для создания запросов на основе сравнения с заданным значением.

Наконец, в operatorOptions textOperatorOptions есть поле exactMatchWithOperator . Если установить 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 , чтобы проверить корректность вашей схемы без фактической регистрации, или false чтобы зарегистрировать схему.

{
  "validateOnly": false,
  "schema": {
    "objectDefinitions": [
      ...
    ]
  }
}

Проиндексируйте свои данные

После регистрации схемы заполните источник данных с помощью вызовов индексации . Индексация обычно выполняется внутри вашего коннектора контента .

Используя схему фильмов, запрос 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 , чтобы найти все фильмы с участием определенного актера. Используя интерфейс поиска, вы можете выполнить этот запрос с использованием оператора, просто введя пару оператор=значение , например, "actor:Zane" , и нажав Enter . В результатах поиска должны быть возвращены все фильмы, в которых Зейн является актером.

Настройте свою схему

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

  • Индексирование поля, которое ранее не индексировалось. Например, ваши пользователи могут неоднократно искать фильмы по имени режиссера, поэтому вы можете изменить свою схему, чтобы она поддерживала имя режиссера в качестве оператора.
  • Изменение названий поисковых операторов на основе отзывов пользователей. Названия операторов должны быть удобными для пользователя. Если ваши пользователи постоянно «запоминают» неправильное название оператора, возможно, стоит его изменить.

Переиндексация после изменения схемы

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

  • Названия операторов.
  • Целочисленные значения минимального и максимального предела.
  • Ранжирование по целочисленному и перечисленному порядку.
  • Варианты сохранения свежести.
  • Параметры отображения.

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

  • Добавление или удаление нового свойства или объекта.
  • Изменение значений isReturnable , isFacetable или isSortable с false на true .

Устанавливать значения isFacetable или isSortable в true следует только в том случае, если у вас есть четкая потребность и обоснованное обоснование такого применения.

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

Запрещенные изменения свойств

Некоторые изменения схемы не допускаются, даже при переиндексации данных, поскольку они приведут к нарушению работы индекса или к получению некачественных или противоречивых результатов поиска. К ним относятся изменения в:

  • Тип данных свойства.
  • Название объекта недвижимости.
  • параметр exactMatchWithOperator .
  • Настройка retrievalImportance .

Однако это ограничение можно обойти.

Внесите сложные изменения в схему.

Чтобы избежать изменений, которые могут привести к некорректным результатам поиска или повреждению поискового индекса, Cloud Search блокирует определенные типы изменений в запросах UpdateSchema после индексации репозитория. Например, тип данных или имя свойства нельзя изменить после того, как они были установлены. Эти изменения невозможно внести с помощью простого запроса UpdateSchema , даже если вы переиндексируете данные.

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

Следующие шаги показывают, как изменить тип данных или имя свойства:

  1. Добавьте новое свойство в определение объекта в вашей схеме. Используйте имя, отличное от имени свойства, которое вы хотите изменить.
  2. Отправьте запрос UpdateSchema с новым определением. Не забудьте отправить в запросе всю схему целиком, включая как новое, так и старое свойство.
  3. Заполните индекс данными из хранилища данных. Для заполнения индекса отправляйте все запросы на индексирование, используя новое свойство, а не старое, поскольку это приведет к двойному подсчету совпадений запросов.

    1. При заполнении пропущенных данных в индексе проверьте наличие нового свойства и используйте старое свойство по умолчанию, чтобы избежать несогласованного поведения.
    2. После завершения заполнения данных выполните тестовые запросы для проверки.
  4. Удалите старое свойство. Отправьте еще один запрос UpdateSchema без старого имени свойства и прекратите использование старого имени свойства в будущих запросах индексирования.

  5. Перенесите все случаи использования старого свойства на новое. Например, если вы изменили имя свойства с creator на author, вам необходимо обновить код запроса, чтобы использовать author там, где ранее использовалось creator.

Cloud Search хранит запись о любом удаленном свойстве или объекте в течение 30 дней, чтобы предотвратить его повторное использование, которое может привести к неожиданным результатам индексирования. В течение этих 30 дней следует полностью отказаться от использования удаленного объекта или свойства, включая исключение его из будущих запросов индексирования. Это гарантирует, что если вы позже решите восстановить это свойство или объект, вы сможете сделать это таким образом, чтобы сохранить корректность вашего индекса.

Учитывайте ограничения по размеру.

Cloud Search устанавливает ограничения на размер структурированных объектов данных и схем. Эти ограничения следующие:

  • Максимальное количество объектов верхнего уровня — 10 объектов.
  • Максимальная глубина иерархии структурированных данных составляет 10 уровней.
  • Общее количество полей в объекте ограничено 1000, включая количество примитивных полей плюс сумму количества полей в каждом вложенном объекте.

Следующие шаги

Вот несколько дальнейших шагов, которые вы можете предпринять:

  1. Создайте интерфейс поиска для проверки вашей схемы.

  2. Настройте схему поиска, чтобы улучшить его качество .

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

  4. Узнайте, как использовать схему _dictionaryEntry для определения синонимов для терминов, часто используемых в вашей компании. Чтобы использовать схему _dictionaryEntry , обратитесь к разделу «Определение синонимов» .

  5. Создайте коннектор .