2013-10-01 2 views
5

Я работаю над кодом ниже, и то, что я хочу сделать, это запрос самого объекта.Эластичный поиск с гнездом

Например: У меня есть форма поиска, которая заполняет поля объектов, такие как ниже. Тогда то, что я хочу сделать, - это поиск Упругого поиска на основе любого пользователя, заполнившего форму.

ie: ниже, я хочу запросить индекс объектом searchItem. Как я могу сделать это легко?

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

ответ

5

Вы не можете :)

NEST не может сделать вывод, как лучше запрос только на основе частично заполненной POCO. Должен ли он OR или AND выполнять запрос вложенного термина или запрос терминов, заключенный в has_child? Ты поймаешь мой дрейф.

Гнездо имеет гладкую функцию под названием conditionless запросы, которые позволяют Вам выписывать весь запрос следующим образом:

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 
    ) 
) 

Когда НЕСТ видит, что аргумент, передаваемый Term является нулевым или очистить его просто обыкновение оказывать, что часть запроса.

Подробнее здесь о том, как эта функция работает http://nest.azurewebsites.net/concepts/writing-queries.html

+0

спасибо за быстрый запрос. заглянет в ваши документы. – helloworld

Смежные вопросы