記述子は、NESTを使用してElasticsearchエンドポイントへのリクエストを流暢に構築するためのタイプです。 Descriptorは、クライアント上の対応するメソッドに渡されます。あなたは、単に流暢に、この代わりに
var createIndexResponse = client.CreateIndex(defaultIndex, c => c
.Settings(s => s
.Analysis(a => a
.TokenFilters(t => t
.NGram("my_filter", ng => ng.MaxGram(32).MinGram(1)))
.Analyzers(an => an
.Custom("my_analyzer", ca => ca
.Tokenizer("standard")
.Filters("my_filter", "lowercase")
)
)
)
)
.Mappings(ms => ms
.Map<Investor>(m => m
.Properties(props => props
.Text(t => t
.Name(p => p.Name)
.Analyzer("my_analyzer")
)
.Text(t => t
.Name(p => p.SomeOtherField)
.Analyzer("my_analyzer"))
.Boolean(b => b
.Name(p => p.IsActive))))
)
);
からパラメータを構築することができますので、例えば、
CreateIndex()
方法で
var descriptor = new CreateIndexDescriptor(defaultIndex)
.Settings(s => s
.Analysis(a => a
.TokenFilters(t => t
.NGram("my_filter", ng => ng.MaxGram(32).MinGram(1)))
.Analyzers(an => an
.Custom("my_analyzer", ca => ca
.Tokenizer("standard")
.Filters("my_filter", "lowercase")
)
)
)
)
.Mappings(ms => ms
.Map<Investor>(m => m
.Properties(props => props
.Text(t => t
.Name(p => p.Name)
.Analyzer("my_analyzer")
)
.Text(t => t
.Name(p => p.SomeOtherField)
.Analyzer("my_analyzer"))
.Boolean(b => b
.Name(p => p.IsActive))));
var createIndexResponse = client.CreateIndex(defaultIndex, c => descriptor);
2番目のパラメータは、そうc
パラメータは、デリゲートに渡されたCreateIndexDescriptor
あるFunc<CreateIndexDescriptor, ICreateIndexRequest>
です
Descriptorsを使用したAPI設計では、Descriptorの新しいインスタンスを自分でインスタンス化する必要はなく、Descriptorが作成されたFunc<TRequestDescriptor, TRequestInterface>
を取得してから、必要なメソッドを呼び出してプロパティthを設定するだけです.Settings()
、.Mappings()
などで行ったことに似ています。これはFluent Lambda構文と呼ばれます。
FESTの代理人とラムダ式があなたのものでない場合、NESTはすべてのAPIのリクエストタイプ(オブジェクト初期化子の構文とも呼ばれます)も提供します。また、要求タイプはそれぞれ対応するTRequestInterface
を実装し、NESTクライアントの各メソッドはオーバーロードされ、TRequestInterface
になります。上記の例のオブジェクト初期化子当量が、それはあなた次第
var createIndexRequest = new CreateIndexRequest(defaultIndex)
{
Settings = new IndexSettings
{
Analysis = new Analysis
{
TokenFilters = new TokenFilters
{
{ "my_filter", new NGramTokenFilter
{
MaxGram = 32,
MinGram = 1
}
}
},
Analyzers = new Analyzers
{
{ "my_analyzer", new CustomAnalyzer
{
Tokenizer = "standard",
Filter = new[] {"my_filter", "lowercase" }
}
}
}
}
},
Mappings = new Mappings
{
{ typeof(Investor), new TypeMapping
{
Properties = new Properties<Investor>
{
{ i => i.Name, new TextProperty
{
Analyzer = "my_analyzer"
}
},
{ i => i.SomeOtherField, new TextProperty
{
Analyzer = "my_analyzer"
}
},
{ i => i.IsActive, new BooleanProperty() }
}
}
}
}
};
var createIndexResponse = client.CreateIndex(createIndexRequest);
流暢ラムダ構文、オブジェクト初期化子の構文、またはその両方を使用していている:)
また、誰もがに私を指すことができればPutMappingDescriptorsとCreateIndexDescriptorsの間の相違を指定するNESTに関する文書、またはLikewiseが参考になります。
PutMappingDescriptor
CreateIndexDescriptor
あなたは、必要に応じて同時にマッピングを作成することができ、インデックスを作成するのに対し、既存のインデックスにマッピングします。トピックは、ドキュメントのintroduction to the mapping sectionで議論されています。