是否可以在string[]
字段中进行RavenDb分面搜索,我希望仅针对以特定字符串开头的值显示构面(计数),而不是范围?
我会尝试用一个简单的例子更好地解释自己,想象一下使用以下条目的索引
ID | Values
-------------------------
1 | CatPersian, CatNormal, DogLabrador
2 | CatPersian, Camel, DogPoodle
3 | CatNormal, CatBengali, DogNormal
4 | DogNormal
我会对上述文档执行查询,而Facet搜索将在“值”字段中包含一系列“Cat *”。这可能吗?然后,我会根据猫的不同值得到一个结果,如:
答案 0 :(得分:0)
是的,你可以这样做。索引数组,然后正常使用facet。 让我们看一下完整的例子。您有以下文件:
{
"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
}
]
}