Индексатор поиска Azure для сложного типа данных - PullRequest
0 голосов
/ 18 июня 2019

Мы уже несколько лет используем Поиск Azure, и он работает хорошо.Я только что узнал о новых сложных типах данных и очень заинтересован в их реализации.Я могу найти хорошие примеры того, как создать индекс, но моя задача состоит в том, как внедрить индексатор.

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

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

В качестве примера, давайте предположим, что мы индексируем данные песни, и эти данные включают в себя SongID, Title, AuthorIDs и AuthorNames.Исходные данные поступают из таблицы Song и таблицы Author, которые содержат идентификатор SongID.Наша текущая сведенная таблица содержит записи, такие как:

SongID: S9182
Название: Моя потрясающая новая песня
AuthorIDs: ["A12345", "A67890"]
AuthorNames: ["John Smith"," Салли Смит "]

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

Спасибо!

1 Ответ

0 голосов
/ 20 июня 2019

Чтобы проиндексировать две таблицы, вам необходимо создать два индексатора (источник данных 1 для таблицы 1, источник данных 2 для таблицы 2; индексатор 1 для источника данных 1, индексатор 2 для источника данных 2). Вы можете создать представление между двумя таблицами, но тогда вы потеряете интегрированное отслеживание изменений.

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

Исходные данные:

{
    "SongID": "S9182",
    "Title": "My awesome new song",
    "AuthorIDs": ["A12345", "A67890"],
    "AuthorNames": ["John Smith", "Sally Smith"]
}

Определение поля индекса:

{
    name: "fieldName",
    type: "Edm.ComplexType",
    fields:[
        {
            name: "songID",
            type: "Edm.String"
        },
        {
            name: "Title",
            type: "Edm.String"
        },
        {
            name: "AuthorIDs",
            type: "Collection(Edm.String)"
        },
        {
            name: "AuthorNames",
            type: "Collection(Edm.String)"
        }
    ]
}

С указанными выше формой данных и определением индекса индексатор будет автоматически индексировать поля внутри JSON в индекс.

Дайте мне знать, если есть еще вопросы.

...