0

所以我在 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 时。

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

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

但是 /AccountId=333&term=BBBB 找不到匹配项。

所以我这样称呼它:

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

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

其中 term 是正常的搜索词,尝试添加 AccountId 但它不起作用。

4

1 回答 1

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 并将其余部分作为可选关键字的搜索查询。

于 2017-11-03T22:03:11.957 回答