Автоматическая индексация секционированных коллекций CosmosDb в Azure Search - PullRequest
0 голосов
/ 26 марта 2019

Мы делаем некоторую работу по автоматической индексации из коллекции CosmosDb.Эта коллекция разбита на разделы, чтобы можно было увеличивать количество RU без ограничений.

Мы хотим создать один индекс поиска Azure для каждого раздела CosmosDb, однако чтение канала ключей раздела из CosmosDb возвращает ключи раздела (например, «0»)., '1' и т. Д.), А не фактическое значение, из которого секционируется коллекция (в нашем случае культуры 'en-US', 'fr-FR' и т. Д.), Что означает, что при создании источника данных в Azure Search, сложно на лету создавать источники данных, индексы и индексаторы.

Мы используем запрос контейнера для фильтрации некоторых документов (не все должны быть проиндексированы) для индексации, но есть лиспособ указать ключ раздела CosmosDb или указать его в запросе SQL иначе, чем пытаться фильтровать поле ключа раздела (в нашем случае «/ Culture»)?

1 Ответ

0 голосов
/ 27 марта 2019

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

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

SELECT DISTINCT c.Culture FROM c

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

SELECT * FROM c WHERE c.Culture == значение ключа раздела

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