2013-04-08 12 views
9

私はElasticSearch NEST C#クライアントを通して簡単なクエリを実行しています。 httpを介して同じクエリを実行すると結果が得られますが、クライアントから返されたドキュメントはゼロになります。ElasticSearch NESTクライアントが結果を返さない

これは私がデータセットを読み込ま方法です:

curl -X POST "http://localhost:9200/blog/posts" -d @blog.json

このPOSTリクエストは、JSONの結果を返します。

http://localhost:9200/_search?q=adipiscing

これは、私はそれが何かを返していない持っているコードです。

public class Connector 
{ 
    private readonly ConnectionSettings _settings; 
    private readonly ElasticClient _client; 

    public Connector() 
    { 
     _settings = new ConnectionSettings("localhost", 9200); 
     _settings.SetDefaultIndex("blog"); 
     _client = new ElasticClient(_settings); 
    } 

    public IEnumerable<BlogEntry> Search(string q) 
    { 
     var result = 
      _client.Search<BlogEntry>(s => s.QueryString(q)); 

     return result.Documents.ToList(); 
    } 
} 

何が欠けていますか?事前のおかげで..

答えて

11

NESTは、タイプと、インデックスの名前を推測しようとすると、あなたのケースでは/ブログ/ blogentries

blogを使用するデフォルトのインデックスがあるとblogentriesそれが小文字になるためと言ったその理由は渡すタイプ名をSearch<T>に複数形にします。あなたはどのタイプとインデックスそうのように制御することができます

.Search<BlogEntry>(s=>s.AllIndices().Query(...)); 

このようになるNESTは、あなたが実際に、コマンドに等しいすべてのインデックスを検索するので、巣がルート上/_searchにそれを翻訳したい知っていますあなたはカールで発行しました。あなたが最も可能性の高い欲しい

は次のとおりです。/blog/posts/_search

+0

おかげでたくさんで

.Search<BlogEntry>(s=>s.Type("posts").Query(...)); 

だからNEST検索!今私は正しいマッピングを作っています –

+0

ありがとう、私のモデルの名前がインデックス名と一致しなかったので、私はこれで苦労しました。さらに、オブジェクトイニシャライザ構文を使用している場合、インデックス名は推測されません(デフォルトではすべてのインデックスになります)。それをより明白にする方法があることはいいですね。 (明示的なものよりも明示的な方が良いでしょう) – Giovanni

+0

オブジェクトイニシャライザの構文を使用していても、すべてのインデックスをデフォルトにするべきではありません。 –

関連する問題