私はAzure Searchの周りにC#nugetラッパーを使用しています。私の問題は、私は製品のインデックスを持っている:Azure Search - Query
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を渡す必要がありますが、AccountIdはProductCustomerSkusを検索するときにのみ使用されます。
基本的に、アカウントは異なる顧客スキューを持つことができますが、そのアカウントにのみ関連付けられているため、アカウントごとに個別のインデックスは必要ありません。
私の電話は、/ AccountId = 222 & term = BBBBのように一致するものがあります。
ただし、/ AccountId = 333 & term = BBBBは一致しません。
だから私はそれが好きで呼んでいる:
用語は、通常の検索用語であり、たAccountIdを追加することでそれを試みたが、それは動作しません SearchParameters sp = new SearchParameters();
sp.SearchMode = SearchMode.Any;
sp.QueryType = QueryType.Full;
DocumentSearchResult<ProductDocument> results =
productIndexClient.Documents.Search<ProductDocument>(term, sp);
。