DocumentDB LAMBDA SqlMethod.Like和.Contains NotImplemented Exception

时间:2014-11-06 12:27:08

标签: azure-cosmosdb

我想做一个简单的" LIKE"使用CreateDocumentQuery使用LAMBDA表达式进行查询;然而,在尝试.ContainsSqlMethod.Like并且两次都收到回复NotImplementedException后,我都不知道接下来要尝试什么!

2 个答案:

答案 0 :(得分:3)

更新:自5/6/15起,DocumentDB添加了一组字符串函数,包括STARTSWITHENDSWITHCONTAINS。请注意,大多数这些功能都不会在索引上运行,并会强制进行扫描。

DocumentDB中尚不支持

LIKECONTAINS

您希望查看DocumentDB feedback page并对功能进行投票(例如LIKECONTAINS)以获取您的声音!

答案 1 :(得分:0)

因为我只需要搜索较大对象的一个​​谨慎的属性子集,我实现了.Contains搜索功能,如下所示。尽管我不了解性能或可扩展性,但它仍按预期工作。

域名模型

public interface ITaxonomySearchable
{
    string Name { get; set; }
    string Description { get; set; }
}

public class TaxonomySearchInfo : ITaxonomySearchable {
    [JsonProperty(PropertyName = "id")]
    public Guid Id { get; set; }
    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }
    [JsonProperty(PropertyName = "description")]
    public string Description { get; set; }
}

public class TaxonomyContainer : ITaxonomySearchable
{
    [JsonProperty(PropertyName = "id")]
    public Guid Id { get; set; }
    [JsonProperty(PropertyName = "userId")]
    public string UserId { get; set; }
    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }
    [JsonProperty(PropertyName = "description")]
    public string Description { get; set; }
    [JsonProperty(PropertyName = "tags")]
    public string[] Tags { get; set; }
    [JsonProperty(PropertyName = "taxonomy")]
    public Node[] Taxonomy { get; set; }
}

搜索方法

public async static Task<List<TaxonomySearchInfo>> Search(string searchTerm)
{
    var db = GetJsonDocumentDb.GetDb();
    using (var client = GetJsonDocumentDb.GetClient())
    {
        var documentCollection = await GetJsonDocumentDb.GetDocumentCollection(db, client, "TaxonomyContainerCollection");
        return client.CreateDocumentQuery<TaxonomySearchInfo>(documentCollection.DocumentsLink)
            .AsEnumerable()
            .Where(r => r.Name.Contains(searchTerm) || r.Description.Contains(searchTerm))
            .ToList();
    }
}