2013-04-08 147 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根,等於命令你髮捲。

你最有可能想要的是:

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

這樣NEST搜索在/blog/posts/_search

+0

非常感謝!現在我必須做出正確的映射 – 2013-12-26 13:18:21

+0

謝謝,我一直在努力,因爲我的模型名稱與索引名稱不匹配。此外,如果使用Object Initializer語法(我猜它默認爲所有索引),則不會推斷索引名稱。有辦法讓它更加明顯會很好。 (我會說,「顯式比隱式更好」原理可以在這裏工作) – Giovanni 2015-04-05 16:27:39

+0

即使使用對象初始值設置語法,它也不應該默認爲所有的索引,請介意在github上打開一個包含代碼長度的票據? – 2015-04-09 20:22:01

相關問題