所以我在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时尝试使用,但它不起作用。
答案 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的搜索查询,其余的作为可选关键字。