2017-05-31 55 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的搜索不支持枚舉類型的字段類型。相反,您需要自己映射枚舉和其中一種受支持的數據類型(int或string,具體取決於您希望標籤還是基礎值存儲在索引中)。實現這一點的一種方法是用[JsonIgnore]標記你的枚舉屬性,然後實現所需字段類型的第二個屬性,並在它與getter/setter中的枚舉之間映射。請注意,您可以控制屬性名稱如何映射到具有[JsonProperty("...")]屬性的索引字段。

此外,您的模型類使用Guid作爲關鍵字段的類型。這也不被支持。您可以使用相同的技術將您自己的Guid屬性映射到實際映射到相應索引字段的字符串屬性。

+0

1)我知道Guids不支持,我們正在將它們轉換爲字符串 2)我嘗試了你的第一個建議,將枚舉設置爲[JsonIgnore],然後有另一個屬性讀取字符串/ int,但是當它嘗試從Azure Search SDK中的方法構建索引時(我將不得不再次回購它以便將其提供給您),這會引發異常 3)最後,我只是將屬性更改爲一個字符串,並寫了一個擴展方法將其轉換回來。 4)我的問題是,雖然Azure Search可能不支持枚舉,但人們會認爲默認情況下可以將其轉換爲int。 –

+0

目前還不清楚int是否是正確的默認值。爲什麼不串?如果在枚舉的中間添加新標籤,其他標籤的值可能會發生變化,而如果僅將標籤用作字符串,則不會更改。您必須小心才能獲得持久性合同,否則您可能會在稍後遇到一些令人討厭的兼容性問題。 如果您想繼續關於SDK如何支持枚舉的討論,請隨時在這裏創建一個問題,並以「Search SDK:」開頭的說明 - https://github.com/azure/azure-sdk- for-net/issues –

+0

你有一個非常有效的關於默認枚舉到int的觀點。我承認這不會是支持枚舉的理想方式。我將提出一個關於我所說的問題,即在索引創建期間JsonIgnore /屬性失敗。 –