【问题标题】:RavenDb facet search in string array field with wildcard使用通配符在字符串数组字段中搜索 RavenDb 方面
【发布时间】:2018-05-04 17:14:46
【问题描述】:

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

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

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

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

  • 猫波斯语 [2]
  • CatNormal [2]
  • 孟加拉猫 [1]

【问题讨论】:

    标签: ravendb faceted-search


    【解决方案1】:

    是的,你可以这样做。索引数组,然后正常使用构面。 让我们看看完整的例子。您有以下文件:

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

    【讨论】:

    • 你能举个例子吗,或者有相关的文档吗?据我所知,对于构面范围搜索,您应该为介于之间的值提供一个“范围”,例如 1-5、6-10。但是在这种情况下,我需要更类似于通配符搜索的东西,其中构面范围将只是'Cat *'。然后,我需要与该通配符匹配的每个不同项目的结果,而不是作为一个组告诉我整个“Cat*”组的计数。
    猜你喜欢
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多