2013-08-13 8 views
10

So di usare i campi di impostazione per includere solo i campi che voglio in una ricerca http://www.elasticsearch.org/guide/reference/api/search/fields/C'è un modo per escludere un campo in una query elasticsearch

... ma mi chiedevo se potevo fare il contrario ... in qualche modo specificare uno o due campi che non voglio includere nei risultati della query (come un allegato, ad esempio). Sembra solo doloroso dover digitare tutti i campi che voglio meno uno o due, quando potrei semplicemente specificare i campi da escludere

+2

Per essere chiari, il parametro "campi" a cui è collegato non influisce sui campi in cui viene eseguita la query, solo ciò che viene restituito ... (penso che tu lo sappia, più per le altre persone che leggono.) – ramseykhalaf

+0

Sì, lo sapevo, grazie per il chiarimento però. – concept47

risposta

7

Hai visto la documentazione per 'parziale' sulla stessa pagina che hai collegato nella tua domanda? Ciò ti consente di fare quello che vuoi, anche se credo che solo nei campi "_source". Vedere http://www.elasticsearch.org/guide/reference/api/search/fields/

Quando si caricano dati da _source, partial campi possono essere utilizzati per utilizzare jolly per controllare quale parte del _source verrà caricata basato su include e exclude modelli.

Sia include e exclude supporto più pattern:

{ 
    "query" : { 
     "match_all" : {} 
    }, 
    "partial_fields" : { 
     "partial1" : { 
      "include" : ["obj1.obj2.*", "obj1.obj4.*"], 
      "exclude" : "obj1.obj3.*" 
     } 
    } 
} 
+1

Beh, potresti citare almeno quella documentazione. Anche se l'OP mancava qualcosa di ovvio, questo è più un commento che una risposta. –

+0

Sì, l'ho visto, l'ho provato ma non ha funzionato, quindi probabilmente sto facendo qualcosa di sbagliato, semplicemente non so cosa: \ – concept47

+1

Puoi pubblicare ciò che hai provato? (Sorpreso che questo non ha funzionato!) – ramseykhalaf

7

È possibile utilizzare il filtro Fonte (testato in v 1.6 e V 1.7..): https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-source-filtering.html

{ 
    "_source": { 
     "include": [ "obj1.*", "obj2.*" ], 
     "exclude": [ "*.description" ] 
    }, 
    "query" : { 
     "term" : { "user" : "kimchy" } 
    } 
} 

È anche possibile utilizzare nella richiesta GET:

curl "localhost:9200/myindex/mytype/66a8f299870b4cab?_source_exclude=file._content&pretty" 

L'esempio precedente esclude il contenuto del file in un campo allegato.

+0

Puoi spiegare, per favore, il selettore di caratteri jolly in questa riga: '" escludi ": [" * .description "]'? ''. .description' è uguale a (riscritto nella regex): '. * \. Description'? Grazie! – crollywood

+0

Ciao @crollywood, l'esempio è tratto dal documento ufficiale ES, esclude tutti i sottocampi di "descrizione", quindi penso che il tuo regexp sarebbe corretto. – Roberto

Problemi correlati