2013-10-01 30 views
5

Tôi đang làm việc với mã bên dưới và những gì tôi muốn làm là truy vấn theo chính đối tượng đó.Tìm kiếm đàn hồi với Nest

Ví dụ: Tôi có biểu mẫu tìm kiếm, điền vào các trường đối tượng như dưới đây. Sau đó, những gì tôi muốn làm là tìm kiếm đàn hồi tìm kiếm dựa trên bất cứ điều gì người dùng điền vào mẫu với.

ví dụ: bên dưới, tôi muốn truy vấn chỉ mục theo đối tượng searchItem. Làm thế nào tôi có thể làm điều đó một cách dễ dàng?

class Program 
{ 
    static void Main(string[] args) 
    { 
     var p = new Program(); 

     var item1 = new Announcement() {Id=1, Title = "john", ContentText = "lorem", Bar = false, Num = 99, Foo = "hellow"}; 

     //p.Index(item1, "add"); 

     var searchItem = new Announcement() {Title="john",Num=99}; 

     ElasticClient.Search<Announcement>(); 

     Console.Read(); 

    } 

    public void Index(Announcement announcement, String operation) 
    { 
     var uriString = "http://localhost:9200"; 
     var searchBoxUri = new Uri(uriString); 

     var settings = new ConnectionSettings(searchBoxUri); 
     settings.SetDefaultIndex("test"); 

     var client = new ElasticClient(settings); 

     if (operation.Equals("delete")) 
     { 
      client.DeleteById("test", "announcement", announcement.Id); 
     } 
     else 
     { 
      client.Index(announcement, "test", "announcement", announcement.Id); 
     } 
    } 

    private static ElasticClient ElasticClient 
    { 
     get 
     { 
      try 
      { 
       var uriString = "http://localhost:9200"; 
       var searchBoxUri = new Uri(uriString); 
       var settings = new ConnectionSettings(searchBoxUri); 
       settings.SetDefaultIndex("test"); 
       return new ElasticClient(settings); 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 
    } 
} 

Trả lời

5

Bạn không thể :)

NEST không thể suy ra làm thế nào để truy vấn tốt nhất chỉ dựa trên một POCO phần điền. Có nên OR hoặc AND nó có nên thực hiện truy vấn cụm từ lồng nhau hoặc truy vấn cụm từ được bao bọc trong has_child không? Bạn bắt trôi tôi.

Nest không có một tính năng trơn gọi là truy vấn conditionless cho phép bạn viết ra cho toàn bộ truy vấn như vậy:

ElasticClient.Search<Announcement>(s=>s 
    .Query(q=> 
     q.Term(p=>p.Title, searchItem.Title) 
     && q.Term(p=>p.Num, searchItem.Num) 
     //Many more queries use() to group all you want 
    ) 
) 

Khi NEST thấy rằng đối số truyền cho Term là null hoặc sản phẩm nào đó chỉ đơn giản là sẽ không làm điều đó một phần của truy vấn.

Đọc thêm tại đây về cách tính năng này hoạt động http://nest.azurewebsites.net/concepts/writing-queries.html

+0

cảm ơn lời nhắc nhanh. sẽ xem xét tài liệu của bạn. – helloworld

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