2017-03-20 17 views
1

.NetクライアントとしてNestを使用してElasticSearchを使用することを学んでいます。データのインデックスを作成しながら、私は、インデックスを書き込むために定義されたモデル(タイプマッピングを)持っていない、私は私ElasticSearchネスト - インデックス名だけを照会

がクライアントにタイプ別

var settings = new ConnectionSettings(_config.Uri); 
settings.DefaultIndex(_config.defaultIndexName); 

_client = new ElasticClient(settings); 

インデックスデータを作成するためにそれを作成するためにElasticSearchに依存しています情報

public void Index(object data) 
{ 
    var response = _client.Index(data, d => d.Type(data.GetType().Name)); 
    if (!response.IsValid) 
    { 
     throw new InvalidOperationException(response.DebugInformation); 
    } 
} 

セイデータ型だった場合、いくつかのプロパティを持つProjectクラス

class Project 
{ 
    int Id {get; set;} 
    string Name {get; set;} 
} 

上記のインデックスデータを照会するにはどうすればよいですか。索引付け部分と検索/照会部分はシステムの完全に分離された部分であり、互いに認識していないことに注意してください。検索時に、取得できる最大のものは「Project」タイプの名前です。内部フィールドの詳細ではありません。だから、私はElasticSearchで検索クエリを実行するにはどうすればよいの流暢APIはこの

_client.Search<Project>(...) 

ようなものにする必要があるだろうが、私は、一般的な何かのよう

_client.Search('project', ...) 

おかげで私は

答えて

2

をしたいと完全に分離されているとはどういう意味なのかはっきりしませんが、NESTを使った検索はSearchDescriptorsを使って行われます。SearchDescriptorsでは、型、インデックス、クエリの種類などをかなり指定できます。

あなたのケースのプロジェクトであるSearchResponseタイプは、ネストに応答をマッピングするオブジェクトタイプを伝えます。

ので:

_client.Search<Project>(...); // Response.Hits should be a list of IHit<Projects> 

あなたは、このような検索記述子にプロジェクトを探して指定することもできに対し:

_client.Search<SomeResponseType>(searchDescriptor => searchDescriptor 
    .Type("project") 
    .Query(q => q.Term("name", "fooBar"))); 
関連する問題