Да, вы можете сделать это. Индексируйте массив, а затем просто используйте фасеты как обычно.
Давайте посмотрим полный пример. У вас есть следующие документы:
{
"Name": "John",
"FavoriteAnimals": [
"Cats",
"Dogs",
"Snails"
],
"@metadata": {
"@collection": "Kids"
}
}
{
"Name": "Jane",
"FavoriteAnimals": [
"Cats",
"Rabits"
],
"@metadata": {
"@collection": "Kids"
}
}
Теперь вы создаете следующий индекс:
from k in docs.Kids
from animal in k.FavoriteAnimals
select new { Animal = animal }
И выполните этот запрос:
from index 'YourIndex'
where startsWith(Animal , 'ca')
select facet('Animal')
И результат будет:
{
"Name": "Animal",
"Values": [
{
"Count": 2,
"Range": "cats"
}
]
}
Кроме того, вы можете использовать этот индекс:
from k in docs.Kids
select new { k.FavoriteAnimals }
И выполнить этот запрос:
from index 'YourIndex'
where startsWith(FavoriteAnimals , 'ca')
select facet('FavoriteAnimals')
Разница в том, что вы получите все совпадения для документов, у которых есть совпадение.
Так что в этом случае
{
"Name": "Animal",
"Values": [
{
"Count": 2,
"Range": "cats"
},
{
"Count": 1,
"Range": "dogs"// also, snails, rabbits
}
]
}