English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La ricerca in Elasticsearch viene effettuata utilizzando query basate su JSON. Le query sono composte da due frasi-
Frase di query foglia - queste frasi sono corrispondenze, termini o intervallo, che cercano valori specifici in campi specifici.
Frase di query complessa - queste query sono la combinazione di frasi di query foglie e query complesse, utilizzate per estrarre le informazioni necessarie.
Elasticsearch supporta una vasta gamma di query. Le query iniziano con una parola chiave di ricerca e sono contenute in forma di oggetto JSON che contiene condizioni e filtri. Di seguito sono descritte le diverse tipi di query.
Questa è la query più semplice; restituisce tutto il contenuto con un punteggio di 1.0 per ogni oggetto.
POST /schools/_search { "query": { "match_all":{} } }
Eseguendo il codice sopra, otteniamo i seguenti risultati-
{ "took": 7, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 2, "relation": "eq" }, "max_score": 1.0, "hits": [] { "_index": "schools", "_type": "school", "_id": "5", "_score": 1.0, "_source": { "name": "Central School", "description": "CBSE Affiliation", "street": "Nagan", "city": "paprola", "state": "HP", "zip": "176115", "location": [ 31.8955385, 76.8380405 ], "fees": 2200, "tags": [ "Senior Secondary" "beautiful campus" ], "rating": "3.3" } }, { "_index": "schools", "_type": "school", "_id": "4", "_score": 1.0, "_source": { "name": "City Best School", "description": "ICSE", "street": "West End", "city": "Meerut", "state": "UP", "zip": "250002", "location": [ 28.9926174, 77.692485 ], "fees": 3500, "tags": [ "fully computerized" ], "rating": "4.5" } } ] } }
Queste query vengono utilizzate per cercare il testo completo, ad esempio capitoli o articoli di notizie. La query lavora secondo l'analizzatore associato a un indice o documento specifico. In questa sezione, discuteremo i diversi tipi di ricerche di testo completo.
Questa query corrisponde ai testi o alle espressioni di un campo o più campi.
POST /schools*/_search { "query": { "match": { "rating":"4.5" } } }
Dopo l'esecuzione del codice sopra riportato, otteniamo la seguente risposta:
{ "took": 44, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.47000363, "hits": [] { "_index": "schools", "_type": "school", "_id": "4", "_score": 0.47000363, "_source": { "name": "City Best School", "description": "ICSE", "street": "West End", "city": "Meerut", "state": "UP", "zip": "250002", "location": [ 28.9926174, 77.692485 ], "fees": 3500, "tags": [ "fully computerized" ], "rating": "4.5" } } ] } }
Questa query corrisponde ai testi o alle espressioni di una o più campi.
POST /schools*/_search { "query": { "multi_match": { "query": "paprola", "fields": ["city", "state"] } } }
Dopo l'esecuzione del codice sopra riportato, otteniamo la seguente risposta:
{ "took": 12, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.9808292, "hits": [] { "_index": "schools", "_type": "school", "_id": "5", "_score": 0.9808292, "_source": { "name": "Central School", "description": "CBSE Affiliation", "street": "Nagan", "city": "paprola", "state": "HP", "zip": "176115", "location": [ 31.8955385, 76.8380405 ], "fees": 2200, "tags": [ "Senior Secondary" "beautiful campus" ], "rating": "3.3" } } ] } }
Questa query utilizza il parser di query e la chiave query_string.
POST /schools*/_search { "query": { "query_string": { "query":"beautiful" } } }
Dopo l'esecuzione del codice sopra riportato, otteniamo la seguente risposta:
{ "took": 60, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, ………………………………….
Queste query trattano principalmente dati strutturati, come numeri, date e enumerazioni.
POST /schools*/_search { "query": { "term":{"zip":"176115"} } }
Dopo l'esecuzione del codice sopra riportato, otteniamo la seguente risposta:
…………………………….. "hits": [ { "_index": "schools", "_type": "school", "_id": "5", "_score": 0.9808292, "_source": { "name": "Central School", "description": "CBSE Affiliation", "street": "Nagan", "city": "paprola", "state": "HP", "zip": "176115", "location": [ 31.8955385, 76.8380405 ], } } ] …………………………………………..
Questa query viene utilizzata per trovare oggetti con valori tra intervalli specificati. Per questo, dobbiamo utilizzare operatori come-
gte −maggiore o uguale a
gt −maggiore di
lte −minore o uguale a
lt −minore di
Ad esempio, osserviamo il codice fornito-
POST /schools*/_search { "query": { "range": { "rating": { "gte": 3.5 } } } }
Dopo l'esecuzione del codice sopra riportato, otteniamo la seguente risposta:
{ "took": 24, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1.0, "hits": [] { "_index": "schools", "_type": "school", "_id": "4", "_score": 1.0, "_source": { "name": "City Best School", "description": "ICSE", "street": "West End", "city": "Meerut", "state": "UP", "zip": "250002", "location": [ 28.9926174, 77.692485 ], "fees": 3500, "tags": [ "fully computerized" ], "rating": "4.5" } } ] } }
Esistono altri tipi di query di livello terminologico, ad esempio-
Query di esistenza −Se un campo ha un valore non vuoto.
Query mancanti −Questo è l'opposto della query di esistenza, che cerca oggetti senza campo specifico o con valore vuoto.
Query di jolly o regexp −Questa query utilizza l'espressione regolare per cercare modelli negli oggetti.
Queste query sono un insieme di diverse query, che si combinano tra loro utilizzando operatori booleani (ad esempio AND / OR, NOT) o su diversi indici o con chiamate a funzioni, ecc.
POST /schools/_search { "query": { "bool": { "must": { "term": { "state": "UP" } }, "filter": { "term": { "fees": "2200" } }, "minimum_should_match": 1, "boost": 1.0 } } }
Dopo l'esecuzione del codice sopra riportato, otteniamo la seguente risposta:
{ "took": 6, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 0, "relation": "eq" }, "max_score": null, "hits": [ ] } }
Queste query trattano posizioni geografiche e oggetti geografici. Queste query aiutano a trovare oggetti geografici vicini a scuole o qualsiasi altra posizione geografica. Devi utilizzare il tipo di dati geografici.
PUT /geo_example { "mappings": { "properties": { "location": { "type": "geo_shape" } } } }
Dopo l'esecuzione del codice sopra riportato, otteniamo la seguente risposta:
{ "acknowledged": true, "shards_acknowledged": true, "index": "geo_example" }
Ora, pubblicheremo i dati nell'indice creato in precedenza.
POST /geo_example/_doc?refresh { "name": "Capitolo Uno, Londra, Regno Unito", "location": { "type": "point", "coordinates": [11.660544, 57.800286] } }
Dopo l'esecuzione del codice sopra riportato, otteniamo la seguente risposta:
{ "took": 1, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 2, "relation": "eq" }, "max_score": 1.0, "hits": [] "_index": "geo_example", "_type": "_doc", "_id": "hASWZ2oBbkdGzVfiXHKD", "_score": 1.0, "_source": { "name": "Capitolo Uno, Londra, Regno Unito", "location": { "type": "point", "coordinates": [ 11.660544, 57.800286 ] } } } }