2013-04-08 27 views
9

ElasticSearch NEST C# istemcisinden basit bir sorgu çalıştırıyorum. Aynı sorguyu http kullanarak çalıştırdığımda sonuçları alırım, ancak istemciden döndürülen sıfır belgeleri alırım. Hiçbir şey bu kod dönen değildir gelmişElasticSearch NEST istemcisi sonuçları döndüremiyor

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

Bu edilir: Bu POST isteği JSON sonuç döndürür

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

:

Bu

ben veri kümesi doldurulur nasıl .

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(); 
    } 
} 

Neyi eksik? Şimdiden teşekkürler ..

cevap

11

Nükleer Tehlike türü ve dizin adını tahmin etmeye çalışır ve sizin durumunuzda o/blog/blogentries

blog kullanacağı varsayılan endeksidir ve blogentries o küçük harfe çünkü ve öyle söylüyor çünkü ilettiğiniz tür adını Search<T>'a çoğaltın. Hangi tip ve dizin şöyle kontrol edebilirsiniz

:

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

Bu izin verir NEST aslında, komuta eşit tüm endekslerin arama yapmak ve böylece yuva kök /_search için çevirmek istediğiniz biliyorum Curl'de yayınladın.

Ne büyük olasılıkla istediğiniz geçerli:

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

Böylece NEST aramalar /blog/posts/_search

+0

sayesinde çok yer! şimdi doğru haritalama yapmam gerekiyor –

+0

Teşekkürler, bununla uğraşıyordum çünkü modelimin adı dizin adıyla uyuşmuyordu. Ayrıca, Object Initializer sözdizimi kullanılırsa indeks ismi çıkarılmaz (varsayılan olarak tüm dizinlere öntanımlıdır). Bunu daha açık hale getirmenin bir yolu olması güzel olurdu. ("Açık olanın üstü örtülü olmaktan iyidir" prensibini burada söyleyebilirim) – Giovanni

+0

Nesne başlatıcı sözdizimini kullansanız bile, kodunuz github'ta bir kod açıyor olsa bile, tüm dizinler için varsayılan değer olmamalıdır. –

İlgili konular