In molti punti della documentazione di grammatica delle query dlsl elasticsearch, le query di wrapper json vengono ignorate nelle spiegazioni probabilmente per ridurre la dimensione della documentazione. Ma è stato confuso mentre navigavo nella documentazione. Quali sono ufficialmente le regole per cosa può o dovrebbe andare dove in una query JSON?In altre parole, sto cercando di trovare lo standard o il pattern comune tra tutte le query elastiche perché ho bisogno di creare una API interna per interrogare l'elasticità. Esiste un modello che contiene tutti i componenti grammaticali "query': {}
all'interno di uno "bool":{}
o uno filter
ecc. In cui posso semplicemente compilare le parti pertinenti e continua a funzionare?Confusioni sulla struttura di query jems dsl di Elasticsearch
risposta
Trovo anche la struttura DSL di Elastic che confonde, ma dopo aver eseguito centinaia di query ci si abitua.
Ecco alcuni esempi (completi) di diversi tipi di query, si spera che questo chiarisca alcune domande, si senta libero di aggiungere scenari in un commento e aggiungerò altri esempi.
Questo è come un query standard assomiglia:
{
"query": {
"bool": {
"must": {
"match": {
"message": "abcd"
}
}
}
}
}
Tuttavia, questo è come una query filtrata sembra, si noterà un cambiamento nella struttura durante il filtraggio elasticsearch:
{
"query": {
"filtered": {
"filter": {
"term": {
"message": "abcd"
}
}
}
}
}
(Read more about the difference between Filters and Queries)
Ecco come appare una query con filtri e query:
{
"query": {
"filtered": {
"filter": {
"term": {
"message": "abcd"
}
},
"query": {
"bool": {
"must": {
"match": {
"message2": "bbbb"
}
}
}
}
}
}
}
Ecco come si esegue un filtro con più condizioni:
{
"query": {
"filtered": {
"filter": {
"and": [
{
"term": {
"message": "abcd"
}
},
{
"term": {
"message2": "abcdd"
}
}
]
}
}
}
}
E un filtro più complesso:
{
"query": {
"filtered": {
"filter": {
"and": [
{
"term": {
"message": "abcd"
}
},
{
"term": {
"message2": "abcdd"
}
},
{
"or": [
{
"term": {
"message3": "abcddx"
}
},
{
"term": {
"message4": "abcdd2"
}
}
]
}
]
}
}
}
}
domanda semplice con aggregazioni:
{
"query": {
"filtered": {
"filter": {
"term": {
"message": "abcd"
}
}
}
},
"aggs": {
"any_name_will_work_here": {
"max": {
"field": "metric1"
}
}
}
}
A query_string
interrogazione :
{
"query": {
"query_string": {
"default_field": "message",
"query": "this AND that"
}
}
}
Alcune altre cose da considerare quando si utilizza la DSL:
- È possibile aggiungere un parametro
size
al livello superiore (sopra la query) che determinerà la quantità di risultati da restituire. Se vuoi contare JUST con i documenti, puoi usare"size": 0
che non otterrà alcun risultato, solo i metadati. - Tuttavia, quando si utilizza
aggs
il parametro di dimensione ha una torsione, impostando"size": 0
all'interno del campoaggs
dirà ES per ottenere TUTTI secchi aggregazione - La struttura DSL ha le sue eccezioni, nei miei esempi che ho di solito utilizzati
terms
, marange
per esempio ha un po 'di una struttura diversa.
- 1. Query DSL Elasticsearch da un'istruzione SQL
- 2. Python elasticsearch-dsl django impaginazione
- 3. Query DSL - Incomprensione di filtri
- 4. Creazione di una lingua di query DSL
- 5. Come utilizzare i parametri Query ElasticSearch (query DSL) per più tipi?
- 6. Risultati diversificati sulla ricerca Elasticsearch
- 7. Scala: URL con parser di query e generatore DSL
- 8. Come posso creare un filtro "OR" usando elasticsearch-dsl-py?
- 9. O e e operatori di query elasticsearch
- 10. Query di intervallo in ElasticSearch (GET senza corpo)
- 11. Escludere alcuni indici dalla query di elasticsearch
- 12. Simboli in stringa di query per elasticsearch
- 13. ElasticSearch Client Java query di oggetti nidificati
- 14. Ottenere query del percolatore di ElasticSearch
- 15. Che cosa fa auto_generate_phrase_queries di Elasticsearch?
- 16. mscordacwks.dll e confusioni mscorwks.dll
- 17. Python: confusioni con l'urljoin
- 18. Async attende poche confusioni
- 19. aggregare un campo in elasticsearch-dsl usando python
- 20. C# Confusioni di incrementi pre e post.
- 21. Query filtrata nell'API Java Elasticsearch
- 22. Constant Score Query elasticsearch boosting
- 23. restituire solo i dati di origine dalla query di elasticsearch
- 24. Un puzzle sulla struttura dati
- 25. Modo corretto per filtrare una query con Elasticsearch? (filtro vs query filtrata)
- 26. La query ElasticSearch si blocca nella coda di lavoro laravel
- 27. Come costruire QueryBuilder da JSON DSL quando si utilizza l'API Java in ElasticSearch?
- 28. Analizzatore di indici di default in elasticsearch
- 29. API jastics elasticsearch: matchAll query di ricerca non restituisce risultati?
- 30. È possibile eseguire una query di aggregazione elasticsearch in Kibana?
Grazie. Quindi, in Filtri, non puoi avere must, shoulds e must_nots? Puoi avere solo AND O ecc.?Se questo è il caso, ho 2 domande. Qual è la differenza tra le AND OR nei filtri e le Bool (Must, should ecc.) Nelle query? E anche la query query_string? Può andare in un filtro o che deve essere nella query? Sembra, il filtro può anche richiedere le domande. Il che rende questa insanley confusa. –
Sì, i filtri richiedono solo 'and' /' or' e le query richiedono 'must' /' should' e sono esattamente uguali (e = must, o = should). La ragione per cui devi scegliere le query sui filtri è in quella risposta SO che ho collegato a prima. Query_string va solo sotto la parte della query e questa è anche un'eccezione nella struttura di query "standard". Aggiungerò un esempio per questo ora. Puoi annidare una 'query' sotto un 'filtro' che in pratica ti permette di combinare le abilità delle query all'interno della stessa query filtrata. È complicato, lo so e hai ragione: ( –
vuoi dire che dovrei usare i filtri sulle query giusto? A causa della memorizzazione nella cache dei filtri? –