2013-04-08 38 views
9

Tôi đang chạy một truy vấn đơn giản thông qua ứng dụng khách CEST của ElasticSearch NEST. Tôi nhận được kết quả khi tôi chạy cùng một truy vấn thông qua http, nhưng tôi nhận được không có tài liệu nào được trả lại từ máy khách.Máy khách NEST của ElasticSearch không trả về kết quả

Đây là cách tôi cư tập dữ liệu:

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

yêu cầu POST này trả về một kết quả JSON:

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

Đây là code tôi đã được không trở về bất cứ điều gì .

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

Tôi đang thiếu gì? Cảm ơn trước ..

Trả lời

11

NEST cố gắng đoán loại và chỉ số tên và trong trường hợp của bạn nó sẽ sử dụng/blog/blogentries

blog vì rằng những gì bạn nói chỉ số mặc định là và blogentries bởi vì nó sẽ thành chữ thường và đa dạng hóa tên loại bạn chuyển đến Search<T>.

Bạn có thể kiểm soát loại và chỉ số như sau:

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

này sẽ cho phép tổ chức NEST biết bạn thực sự muốn tìm kiếm trên tất cả các chỉ số và do đó làm tổ sẽ dịch nó để /_search vào thư mục gốc, tương đương với lệnh bạn đã ban hành trên curl.

Những gì bạn có khả năng nhất muốn là:

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

Vì vậy, rằng các tìm kiếm NEST trong /blog/posts/_search

+0

thanks a lot! bây giờ tôi đã tạo bản đồ phù hợp –

+0

Cảm ơn, tôi đã đấu tranh với điều này vì tên của mô hình của tôi không khớp với tên chỉ mục. Hơn nữa, tên chỉ mục không được suy ra nếu sử dụng Cú pháp của đối tượng khởi tạo đối tượng (tôi đoán nó là mặc định cho tất cả các chỉ mục). Sẽ là tốt đẹp để có một cách để làm cho nó rõ ràng hơn. (Tôi muốn nói nguyên tắc "Rõ ràng tốt hơn là ngầm" sẽ hoạt động ở đây) – Giovanni

+0

Nó không nên mặc định cho tất cả các chỉ mục ngay cả khi bạn sử dụng cú pháp khởi tạo đối tượng, tâm trí mở một vé trên github với mã của bạn trông như thế nào? –

Các vấn đề liên quan