2015-06-26 17 views
13

Utilizzo di ElasticSearch NEST, ho problemi a ottenere risultati attesi dalle mie query. Il mio layout index/tipo è la seguente:Ricerca NEST ElasticSearch Tipi multipli e tutti i campi

  • teatri (indice)
    • eventi (tipo)
    • teatro
    • promozione
    • contenuto generico

Ognuno di questi tipi ha i propri campi, e Sto usando il metodo Index() di NEST per indicizzare i dati. Posso verificare che è in fase di indicizzato correttamente:

  • Guardando http://localhost:9200/theatres/_mapping
  • Utilizzando il plugin Head per visualizzare i dati

Per riferimento, ecco la mia configurazione del client:

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

The Query

Ora, per la query, desidero cercare tutti i tipi e tutti i campi all'interno dell'indice. Utilizzando il plugin capo, io sono in grado di generare la query e ottenere i risultati attesi: enter image description here

Utilizzando tale query che ha generato, ho provato la seguente query NEST:

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

Tuttavia, questo mi dà una risultato diverso. NEST sta facendo qualcosa dietro le quinte di cui non sono a conoscenza? O questo non è supportato?

+0

Vorrei suggerire .Size (10) al posto di .Prendere (20) solo per rimuovilo come variabile per errore, sebbene la funzionalità dovrebbe essere la stessa. Inoltre, credo che sia possibile rimuovere .DefaultField e tutti i campi verranno cercati. Potresti provare? Sono curioso di questo –

+1

@ DanielHoffmann-Mitscherling ho aggiornato questo e ancora ottengo 0 risultati, quando dovrei ottenere 1. –

+1

Così strano! Potresti aggiungere di nuovo DefaultField ("_ all") e anche aggiungere. AllTypes()? Costringere manualmente NEST a creare una query con tutti i tipi potrebbe darci ulteriori informazioni –

risposta

17

Vostri criteri manca .AllTypes()

È inoltre possibile specificare più tipi utilizzando .Types("type1", "type1")

Quindi:

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

Possiamo usare qui il filtro Termine basato sul tipo. Esempio: due tipi: "tipo1", "tipo2" tipo1 avente: nome, posizione, tipo2 con: countryid e stateid utilizzando questo come è possibile ottenere qui un filtro per il termine basato sul tipo? –

+0

@MohanGopi - Sì: '.Type () .Type ()' –

Problemi correlati