2013-10-01 19 views
5

Sto lavorando al di sotto del codice, e quello che voglio fare è interrogare per oggetto stesso.Ricerca elastica con Nest

Ad esempio: Ho un modulo di ricerca, che popola i campi degli oggetti come di seguito. Quindi quello che voglio fare è cercare la ricerca elastica in base a qualsiasi utente abbia compilato il modulo.

ie: sotto, voglio interrogare l'indice tramite oggetto searchItem. Come posso farlo facilmente?

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

risposta

5

Non si può :)

NEST non può dedurre come meglio query basata solo su un POCO parzialmente riempito. Dovrebbe OR o AND dovrebbe fare una query di termini nidificati o una query di termini racchiusa in un has_child? Tu prendi la mia direzione.

Nest ha una caratteristica chiazza di petrolio chiamati query conditionless che consentono la scrittura fuori per tutta la domanda in questo modo:

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

Quando NEST vede che l'argomento passato a termine è nullo o vuoto che semplicemente non rendono che parte della query.

Leggi tutto qui su come funziona questa caratteristica http://nest.azurewebsites.net/concepts/writing-queries.html

+0

grazie per pronta rapido. esaminerà i tuoi documenti. – helloworld

Problemi correlati