Azure Cognitive Search не поддерживает поля, которые ведут себя как свободно набранные пакеты свойств, такие как словари. Все поля в индексе должны иметь четко определенный тип EDM .
Если вы не знаете набор возможных полей во время разработки, у вас есть пара вариантов, но ониПриходите с большими предостережениями:
- В своем коде приложения добавляйте новые поля в определение индекса по мере их обнаружения при индексации документов. Обновление индекса добавит задержку к вашему общему пути записи, поэтому в зависимости от того, как часто добавляются новые поля, это может или не может быть практичным.
- Моделируйте ваши "динамические" поля как набор имен / значений. поля, по одному для каждого желаемого типа данных. Например, если обнаружено новое строковое поле «цвет» со значением «синий», загружаемый вами документ может выглядеть следующим образом:
{
"id": "123",
"someOtherField": 3.5,
"dynamicStringFields": [
{
"name": "color",
"value": "blue"
}
]
}
Подход № 1 может столкнуться с ограничение на максимальное количество полей в индексе .
Подход № 2 рискует натолкнуться на ограничение на максимальное количество элементов во всех сложных коллекциях на документ . Это также усложняет модель запроса, особенно для случаев, когда вам может понадобиться коррелированная семантика в запросах.