2017-05-31 13 views
3

検索ドキュメントに列挙型があると、それはint型に変換されると私は理解していました。私が何か間違っていない限り、これは起きていないようで、これを動作させる唯一の方法は列挙型を文字列に変換することです。これは間違っているようです。私は何か間違ったことをしたのか、それともこれが不可能なのか誰かに教えてもらえますか?Azure検索ドキュメントで列挙型を使用する

例:インデックスを作成しようとしているときに、私は上記のようなものを使用している場合

public enum WebSearchRecordType{ 
    Unknown = 0, 
    Doc1 = 1, 
    Doc2 = 2 
} 

public class WebSearchDocument{ 
    public Guid Id {get;set;} 
    public WebSearchRecordType RecordType { get; set; } 
} 

、私は次のエラーを取得する:

Message: "Property recordType has unsupported type Web.Search.WebSearchRecordType\r\nParameter name: propertyType"

+0

私の例が悪いと分かりましたので、ちょっとしてコードをコピーします。 –

+0

どのバージョンのMicrosoft.Azure.Searchパッケージを使用していますか?また、索引の作成に使用したコードを共有できますか? –

+0

すぐに私の狂気の生活に戻ってようこそ@BruceJohnston :) –

答えて

0

Azureの検索は、フィールドタイプとして列挙型をサポートしていません。 。その代わりに、列挙型と、サポートされているデータ型の1つの間で、ラベルまたは基になる値をインデックスに格納するかどうかに応じて、intまたはstringのいずれかをマップする必要があります。これを実現する1つの方法は、[JsonIgnore]でenumプロパティをマークしてから、希望のフィールドタイプの2番目のプロパティを実装し、getter/setterのenumとの間にマップします。 [JsonProperty("...")]属性を持つプロパティフィールドのインデックスフィールドへのマッピング方法を制御できます。

また、モデルクラスでは、キーフィールドのタイプとしてGuidが使用されています。これもサポートされていません。同じテクニックを使用して、独自のGuidプロパティを、対応するインデックスフィールドに実際にマップされる文字列プロパティにマップできます。

+0

1)私はGuidsがサポートされていないと私たちはそれらを文字列に変換していることを知っている 2)私は[JsonIgnore]にenumを設定し、文字列/ intを読み取るが、これはAzure Search SDKのメソッドからインデックスを作成しようとしているときに例外を投げた(私はあなたにそれを与えることができるので再度書き直す必要がある) 3)最後に私はそのプロパティを文字列に変更し、それを元に戻す拡張メソッドを書きました。 4)私の問題は、Azure Searchが列挙型をサポートしていないかもしれないが、デフォルトではそれをintに変換できると思うということだ。 –

+0

intが正しいデフォルトであることは明らかではありません。なぜストリングじゃない?列挙の途中に新しいラベルを追加すると、他のラベルの値が変更されることがありますが、ラベルを文字列として使用するだけで変更されることはありません。あなたは永続性の契約を正しく取得するために注意を払う必要があります。あるいは、後でいくつかの厄介な互換性の問題に遭遇する可能性があります。 SDKが列挙型をサポートする方法についての議論を続けたい場合は、「Search SDK:」で始まる説明でここで問題を作成してください。https://github.com/azure/azure-sdk- for-net/issues –

+0

あなたはenumをintにデフォルト設定することに関して非常に有効な点があります。私はこれが列挙型をサポートする理想的な方法ではないと考えます。インデックスの作成中にJsonIgnore /プロパティが失敗することについて、私が述べたことに関して問題を提起します。 –