Индекс Дизайн | Производительность нескольких индексов VS 1 Index с несколькими источниками данных - PullRequest
0 голосов
/ 16 мая 2019

Реализация поиска Azure. В настоящее время у нас есть две таблицы (реляционные БД), связанные друг с другом, которые мы хотели бы использовать в качестве индекса.

Какой лучший способ реализовать это?

  1. Нажав два индекса (по одному для каждой таблицы), выполните соединение между результаты в коде.
  2. Два источника данных (по одному для каждой таблицы), два индексатора, указывающие на один и тот же индекс.
  3. Используя SQL View, выполняем объединение в нем.

Я использую первый вариант в качестве примера, но я получаю результаты от 200 до 400 мс только для 3 записей -Использование почтальона . Бизнес-лимит будет около 20 результатов. Меня беспокоит это, когда я начинаю добавлять другие индексы, а затем выполнять соединение между ними в коде, которое может быть неэффективным.

Скажем, к примеру, главная таблица, с которой связано 4 или 5 таблиц (отношение PK - FK), мне нужно было бы создать индекс для каждой из них. Это нормально? Это вызовет проблемы с производительностью? Должен ли я попробовать второй или третий вариант?

Не могли бы вы расширить свой ответ. Спасибо

1 Ответ

0 голосов
/ 17 мая 2019

Я бы посоветовал вам взглянуть на новые возможности сложного типа поиска Azure. Для отношений 1: N вы можете поместить связанные записи в поле Collection (Edm.ComplexType) в индексе. Больше информации о сложных типах: https://docs.microsoft.com/en-us/azure/search/search-howto-complex-data-types

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

SQL на самом деле делает определение представления довольно простым. Например, для образца схемы Azure Search Hotels это будет:

SELECT *, (SELECT *
    FROM dbo.Rooms$
    WHERE dbo.Rooms$.HotelID = dbo.Hotels$.HotelID FOR JSON AUTO) AS Rooms
FROM dbo.Hotels$

Надеюсь, это поможет.

Майк Картер
Команда продукта поиска Azure

...