2015-06-26 23 views
13

Sử dụng Tìm kiếm Đàn hồi NEST, tôi gặp khó khăn khi nhận kết quả mong đợi từ các truy vấn của mình. bố trí index/loại của tôi là như sau:Tìm kiếm Đàn hồi NEST Tìm kiếm Nhiều Loại & Tất cả các Trường

  • rạp (index)
    • sự kiện (các loại)
    • hát
    • xúc tiến
    • nội dung chung chung

Mỗi loại có các trường riêng của chúng và Tôi đang sử dụng phương thức Index() của NEST để lập chỉ mục dữ liệu. Tôi có thể xác minh rằng nó đang được lập chỉ mục đúng theo:

  • Nhìn vào http://localhost:9200/theatres/_mapping
  • Sử dụng các plugin Head để xem dữ liệu

Để tham khảo, dưới đây là cấu hình khách hàng của tôi:

// TODO: Put settings in config 
var node = new Uri("http://localhost:9200"); 
var connSettings = new ConnectionSettings(node); 
connSettings.SetDefaultIndex("theatres"); 
connSettings.ThrowOnElasticsearchServerExceptions(); 

var client = new ElasticClient(connSettings); 

Truy vấn

Bây giờ, đối với truy vấn, tôi muốn tìm kiếm tất cả các loạitất cả các trường trong chỉ mục. Sử dụng các plugin Head, tôi có thể tạo ra các truy vấn và nhận được kết quả mong đợi: enter image description here

Sử dụng truy vấn mà nó tạo ra, tôi đã cố gắng truy vấn NEST sau:

var query = "waukesha"; // This would be passed in 

var resp = client.Search<dynamic>(s => s 
    .From(0) 
    .Take(10) 
    .Query(qry => qry 
     .Bool(b => b 
     .Must(m => m 
      .QueryString(qs => qs 
       .DefaultField("_all") 
       .Query(query)))))); 

Tuy nhiên, điều này mang lại cho tôi một kết quả khác nhau. NEST có làm gì đó đằng sau hậu trường mà tôi không biết? Hoặc điều này không được hỗ trợ?

+0

tôi sẽ đề nghị .Size (10) thay vì .Take (20) chỉ để loại bỏ điều đó dưới dạng biến cho lỗi, mặc dù chức năng phải giống nhau. Ngoài ra tôi tin rằng bạn có thể loại bỏ .DefaultField và tất cả các trường sẽ được tìm kiếm. Bạn có thể thử điều đó không? Tôi tò mò về điều này –

+1

@ DanielHoffmann-Mitscherling tôi cập nhật này và vẫn nhận được 0 kết quả, khi tôi sẽ nhận được 1. –

+1

Rất lạ! Bạn có thể thêm lại DefaultField ("_ all") và cũng có thể thêm .AllTypes()? Thủ công buộc NEST tạo truy vấn với tất cả các loại có thể cung cấp cho chúng tôi thêm thông tin –

Trả lời

17

truy vấn của bạn thiếu .AllTypes()

Bạn cũng có thể chỉ định nhiều loại sử dụng .Types("type1", "type1")

Vì vậy:

var query = "waukesha"; // This would be passed in 

var resp = client.Search<dynamic>(s => s 
    .AllTypes() 
    .From(0) 
    .Take(10) 
    .Query(qry => qry 
     .Bool(b => b 
     .Must(m => m 
      .QueryString(qs => qs 
       .DefaultField("_all") 
       .Query(query)))))); 
+0

Chúng tôi có thể sử dụng bộ lọc Loại dựa trên cụm từ tại đây không. Ví dụ: Hai loại: "type1", "type2" type1 có: name, locationid, type2 có: countryid và stateid bằng cách sử dụng bộ lọc kiểu này có thể đạt được như thế nào ở đây? –

+0

@MohanGopi - Có: '.Type () .Type ()' –

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