Azure搜索 - 查询

时间:2017-11-03 16:51:09

标签: azure-search azure-search-.net-sdk

所以我在Azure搜索中使用C#nuget包装器。我的问题是我有一个产品索引:

public class ProductDocument
{
    [System.ComponentModel.DataAnnotations.Key]
    public string Key { get; set; }
    [IsSearchable]
    public string Sku { get; set; }
    [IsSearchable]
    public string Name { get; set; }
    [IsSearchable]
    public string FullDescription { get; set; }

    [IsSearchable]
    public List<CustomerSkuDocument> CustomerSkus { get; set; }
}
public class CustomerSkuDocument
{
    [IsSearchable]
    public int AccountId { get; set; }
    [IsSearchable]
    public string Sku { get; set; }
}

示例数据将是:

            new Product() { Key= 100,Name="Nail 101",Sku = "CCCCCCCC", CustomerSkus = new List<ProductCustomerSku>()
            {
                new ProductCustomerSku() {AccountId = 222, CustomerSku = "BBBB"},
                new ProductCustomerSku() {AccountId = 333, CustomerSku = "EEEEEEE"}
            } 

所以问题在于CustomerSkuDocument。 当我搜索时我需要传递AccountId以及搜索词,但是AccountId仅用于搜索ProductCustomerSkus时。

基本上,一个帐户可以有不同的客户权限,但它只与该帐户相关联 - 我不希望每个帐户都有单独的索引。

所以我的电话会像/ AccountId = 222&amp; term = BBBB那样找到匹配。

然而/ AccountId = 333&amp; term = BBBB找不到匹配。

所以我称之为:

        SearchParameters sp = new SearchParameters();
            sp.SearchMode = SearchMode.Any;
            sp.QueryType = QueryType.Full;

            DocumentSearchResult<ProductDocument> results =
            productIndexClient.Documents.Search<ProductDocument>(term, sp);

如果术语是普通搜索词,请在添加AccountId时尝试使用,但它不起作用。

1 个答案:

答案 0 :(得分:0)

Azure搜索不支持嵌套在外部文档的属性下的重复数据结构。我们正在研究这个问题(参见https://feedback.azure.com/forums/263029-azure-search/suggestions/6670910-modelling-complex-types-in-indexes),但在我们发布之前我们还有一些工作要做。

鉴于此,您展示的示例可能不是索引嵌套部分。你可以发布你正在使用的搜索索引定义吗?虽然我们直接支持复杂类型,但您可以在此处查看方法选项:https://docs.microsoft.com/en-us/azure/search/search-howto-complex-data-types

从上面你会看到一个索引结构,它也会指导你的查询选项。如果你需要的只是平等,也许你可以简单地在同一个字段中包含accountId和SKU并使用一个集合字段,这样你就可以拥有多个实例。对于您的查询,您将发出一个需要accountId的搜索查询,其余的作为可选关键字。