2017-12-07 8 views
0

私はそうのようなConnectionSettingsオブジェクトを設定しています:Elasticsearch Idを推論5.xの

ConnectionSettings = new ConnectionSettings(settings.EndPointUrl) 
    .DefaultIndex("myindex") 
    .BasicAuthentication(settings.Username, settings.Password) 
    .PrettyJson() 
    .InferMappingFor<MyObject>(l => l 
     .IdProperty(p => p.UserId) 
    ); 

私はインデックスMyObject、それはInferMappingFor設定を尊重されていません。 InferMappingForが機能しない理由

var response = Elasticsearch.Client.Index(model, i => i 
    .Id(model.UserId) 
); 

任意のアイデア:私は明示的にIdフィールドを設定、そのようなインデックス単一のオブジェクトに持っていましたか?何か不足していますか?

+1

「Elasticsearch.Client」は、上記で定義した「ConnectionSettings」を使用していますか? NEST 5.xを使用していますか? – Rob

答えて

0

InferMappingの代わりに、MyObjectクラスで属性の装飾を使用する必要があります。例:

[ElasticsearchType(Name = "myObject", Id=nameof(MyObject.UserID)] 
public class MyObject { 
    public String UserID {get;set;} 

    //more properties 
} 
+0

私はそれを行う能力がありません。私たちのモデルは別のプロジェクトにあり、ESへの依存がモデルプロジェクトを参照する他のプロジェクトに伝播するため、そのプロジェクトがESに依存することは望ましくありません。 – Namrehs

+0

これはあなたの質問に本当に答えるものではありませんが、そのモデルが適切なプロジェクトにあるかどうかを考えていることを確認してください。そのモデルは、ドメインモデルとして共有されていないElasticSearchによって所有される必要があります。あなたは、他のプロジェクトでESの依存関係を望まないのは当然です。 – jhilden