使用通配符在字符串数组字段中搜索RavenDb facet

时间:2018-05-04 17:14:47

标签: ravendb faceted-search

是否可以在string[]字段中进行RavenDb分面搜索,我希望仅针对以特定字符串开头的值显示构面(计数),而不是范围?

我会尝试用一个简单的例子更好地解释自己,想象一下使用以下条目的索引

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

我会对上述文档执行查询,而Facet搜索将在“值”字段中包含一系列“Cat *”。这可能吗?然后,我会根据猫的不同值得到一个结果,如:

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

1 个答案:

答案 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
        }
    ]
}