2017-11-03 16 views
0

私は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); 

答えて

0

Azure Searchは、外部ドキュメントのプロパティの下にネストされたデータ構造の繰り返しをサポートしていません。我々はこれに取り組んでいます(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

また、あなたのクエリオプションをご案内いたしますインデックス構造でarribeます以上のことから。必要なものが等しい場合は、accountIdとSKUを同じフィールドに追加してコレクションフィールドを使用するだけで、複数のインスタンスを持つことができます。クエリでは、accountIdを必要とする検索クエリを発行し、残りはオプションのキーワードとして指定します。

関連する問題