2016-12-31 16 views
0

我正嘗試在C#中使用NEST客戶端並使用Elasticsearch v5.x構建通用數據加載器。我可以定義自定義的類映射到我的ES索引上的類型,並且特別提到哪個屬性應該被視爲id。這工作正常,我可以使用批量API來加載數據。在NEST中爲Elasticsearch類型動態分配IdProperty

[ElasticsearchType(IdProperty = "col1")] 
    public class Table1 
    {  
    public int col1 { get; set; } 
    public string col2 { get; set; } 
    public string col3 { get; set; } 
    } 

但是,這將需要我定義類,每次我必須加載到索引的新類型。所以我想構建一個通用加載實用程序,我可以提供一個XML輸入,動態生成一個類對象,並且對於該類對象,我需要設置IdProperty。我仍然試圖找出如何快速構建動態對象,並且遇到了本週我將嘗試的幾個樣本。

因此,讓我說我能夠通過這個障礙,我的下一個問題是如何在運行時動態設置IdProperty?任何其他建議也是受歡迎的。

感謝

回答

0

使用System.ComponentModel.TypeDescriptor,可以將屬性在運行時添加到類型,只要TypeDescriptor用於檢索這些屬性。但是NEST不使用TypeDescriptor,因此無法採用此路線。

默認情況下,NEST will look for a property with the case-insensitive name "Id" to use as the id for a document,如果沒有ElasticsearchTypeAttributeIdProperty存在並沒有推斷的映射已經成立了ConnectionSettings。因此,您始終可以確保您的類型擁有Id屬性。

+0

感謝您的回覆。我採取了一條稍微不同的路線來解決主要問題。我現在正在將我的XML轉換爲Json並生成我用來索引文檔的原始Json。在兩者之間,我有一個配置集來標識Json的哪個屬性應該被視爲ID,並且我正在動態地添加該ID。一旦json被構建,我就使用低級客戶端的批量方法。 – askids

+0

也要補充,我嘗試使用動態與ExpandoObject類似的結果,即動態添加ID屬性。它適用於較小的一組數據。但是對於更大的集合,我開始得到Stackoverflow異常(可能是由於錯誤編碼和動態對象限制)。所以我沒有進一步追求這個方法。 – askids