Поиск фасетов RavenDb в поле массива строк с подстановочными знаками - PullRequest
0 голосов
/ 04 мая 2018

Возможно ли иметь фасетный поиск RavenDb в поле string[], где я хотел бы показать фасеты (числа) только для значений, начинающихся с конкретной строки, а не диапазона?

Я попытаюсь объяснить себя лучше на простом примере, представьте себе индекс с записями ниже

ID | Values
-------------------------
1  | CatPersian, CatNormal, DogLabrador
2  | CatPersian, Camel, DogPoodle
3  | CatNormal, CatBengali, DogNormal
4  | DogNormal

Я бы выполнил запрос по вышеуказанным документам, и поиск по фасету включал бы диапазон 'Cat *' в поле 'Значения'. Это возможно? Затем я получу результат, основанный только на разных значениях для кошек, например:

  • CatPersian [2]
  • CatNormal [2]
  • CatBengali [1]

1 Ответ

0 голосов
/ 08 мая 2018

Да, вы можете сделать это. Индексируйте массив, а затем просто используйте фасеты как обычно. Давайте посмотрим полный пример. У вас есть следующие документы:

{
    "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
        }
    ]
}
...