gpt4 book ai didi

c# - Azure CosmosDB Contains 方法不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:25 25 4
gpt4 key购买 nike

我不确定,但我认为我在 Azure Cosmos DB 中发现了一个错误。这是我的情况。我有以下 JSON

{
"id": "token",
"User": {
"UserToken": "token",
"Email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c4a1a9a5ada884a1a9a5ada8eaa7aba9" rel="noreferrer noopener nofollow">[email protected]</a>"
},
"_ts": 1521728825
}

我使用 LINQ 编写了以下查询:

await _dbClient.Where<UserDocument>(_collectionUri,feedOptions,  
d => d.User.UserToken == searchString
|| d.User.Email.Contains(searchString))
.OrderByDescending(d => d.Timestamp)
.AsDocumentQuery().ToListAsync())

当我使用 searchString=="token" 运行它时,它将返回一个空列表,因此我决定修改查询:

await _dbClient.Where<UserDocument>(_collectionUri,feedOptions,  
d => d.User.UserToken == searchString)
.OrderByDescending(d => d.Timestamp)
.AsDocumentQuery().ToListAsync())

神奇的是它开始工作了。有人可以告诉我我做错了什么吗?或者也许 CosmosDB 中的 CONTAINS 方法存在问题??

最佳答案

这不是一个错误。这与您收藏的索引政策有关。

我不知道您的索引策略当前是什么样的,但是当在字符串上完全匹配有效而部分匹配无效时,可以肯定地说您正在使用哈希 字符串索引。

使用哈希时,只有相等性检查才会返回值。您需要将字符串索引更改为 Range 和精度 -1 以部分匹配字符串。

您可以在数据浏览器的规模和设置部分找到您的索引设置。

如果您的索引策略如下所示:

enter image description here

然后将其更改为:

enter image description here

应该可以。

但是,您可以进一步限制这一点,仅将 /User/Email/? 索引为 Range,并将其余部分保留为哈希。

您还可以通过提供 FeedOptions 对象并将 EnableScanInQuery 值设置为 true 来覆盖此行为。然而,我得到的结果好坏参半,所以我会改变索引。

我强烈建议您查看索引文档 here 。还有一个很棒的视频解释了更多相关内容。

关于c# - Azure CosmosDB Contains 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com