Ricerca di dati in Amazon OpenSearch Service - Amazon OpenSearch Service

Ricerca di dati in Amazon OpenSearch Service

Esistono diversi metodi comuni di ricerca dei documenti in Amazon OpenSearch Service, incluse ricerche URI e ricerche del corpo della richiesta. OpenSearch Service offre funzionalità aggiuntive che migliorano l'esperienza di ricerca, ad esempio pacchetti personalizzati, supporto SQL e ricerca asincrona. Per una documentazione di riferimento delle API di ricerca OpenSearch completa, consultare la documentazione OpenSearch.

Nota

Le seguenti richieste di esempio funzionano con le API OpenSearch. Alcune richieste potrebbero non funzionare con versioni precedenti di Elasticsearch.

Ricerche negli URI

Le ricerche URI (Universal Resource Identifier) sono la forma di ricerca più semplice. In una ricerca URI, si specifica la query come un parametro di richiesta HTTP:

GET https://search-my-domain.us-west-1.es.amazonaws.com/_search?q=house

L'aspetto di una risposta di esempio è simile al seguente:

{ "took": 25, "timed_out": false, "_shards": { "total": 10, "successful": 10, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 85, "relation": "eq", }, "max_score": 6.6137657, "hits": [ { "_index": "movies", "_type": "movie", "_id": "tt0077975", "_score": 6.6137657, "_source": { "directors": [ "John Landis" ], "release_date": "1978-07-27T00:00:00Z", "rating": 7.5, "genres": [ "Comedy", "Romance" ], "image_url": "http://ia.media-imdb.com/images/M/MV5BMTY2OTQxNTc1OF5BMl5BanBnXkFtZTYwNjA3NjI5._V1_SX400_.jpg", "plot": "At a 1962 College, Dean Vernon Wormer is determined to expel the entire Delta Tau Chi Fraternity, but those troublemakers have other plans for him.", "title": "Animal House", "rank": 527, "running_time_secs": 6540, "actors": [ "John Belushi", "Karen Allen", "Tom Hulce" ], "year": 1978, "id": "tt0077975" } }, ... ] } }

Per impostazione predefinita, questa query ricerca il termine house in tutti i campi di tutti gli indici. Per restringere la ricerca, specifica un indice (movies) e un campo di documento (title) nell'URI:

GET https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search?q=title:house

Nella richiesta è possibile includere parametri aggiuntivi, ma i parametri supportati forniscono solo un piccolo sottoinsieme delle opzioni di ricerca di OpenSearch. La seguente richiesta restituisce 20 risultati (anziché il numero predefinito di 10) ordinati per anno (anziché per _score):

GET https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search?q=title:house&size=20&sort=year:desc

Ricerche nel corpo della richiesta

Per eseguire ricerche più complesse, utilizzare il corpo della richiesta HTTP e il linguaggio specifico di dominio (DSL) di OpenSearch per le query. Il linguaggio DSL di query consente di specificare l'intera gamma di valori delle opzioni di ricerca di OpenSearch. La seguente query match è simile all'esempio di ricerca URI finale:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "sort": { "year": { "order": "desc" } }, "query": { "query_string": { "default_field": "title", "query": "house" } } }
Nota

L'API _search accetta GET e POST HTTP per ricerche del corpo della richiesta, ma non tutti i client HTTP supportano l'aggiunta di un corpo della richiesta a una richiesta GET. POST è la scelta più universale.

In molti casi, potrebbe essere necessario eseguire la ricerca in diversi campi, ma non in tutti. Utilizza la query multi_match:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title", "plot", "actors", "directors"] } } }

Campi di boosting

Puoi migliorare la rilevanza della ricerca "potenziando" alcuni campi. I boost sono moltiplicatori che valutano le corrispondenze in un campo più pesantemente rispetto alle corrispondenze in altri campi. Nel seguente esempio, una corrispondenza per john nel campo title influenza _score il doppio di una corrispondenza nel campo plot e quattro volte di più di una corrispondenza nei campi actors o directors. Ne risulta che film come John Wick e John Carter sono vicini alla parte alta dei risultati della ricerca e film con protagonista John Travolta sono nella parte bassa.

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "john", "fields": ["title^4", "plot^2", "actors", "directors"] } } }

Paginazione dei risultati della ricerca

Se occorre visualizzare un numero elevato di risultati della ricerca, puoi implementare la paginazione utilizzando il parametro from. La richiesta seguente restituisce i risultati 20-39 dell'elenco indicizzato su zero dei risultati della ricerca:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "from": 20, "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } } }

Evidenziazione dei risultati della ricerca

L'opzione highlight indica a OpenSearch di restituire un oggetto aggiuntivo all'interno dell'array hits se la query corrisponde a uno o più campi:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } }, "highlight": { "fields": { "plot": {} } } }

Se la query corrisponde al contenuto del campo plot, l'aspetto di un'occorrenza è simile al seguente:

{ "_index": "movies", "_type": "movie", "_id": "tt0091541", "_score": 11.276199, "_source": { "directors": [ "Richard Benjamin" ], "release_date": "1986-03-26T00:00:00Z", "rating": 6, "genres": [ "Comedy", "Music" ], "image_url": "http://ia.media-imdb.com/images/M/MV5BMTIzODEzODE2OF5BMl5BanBnXkFtZTcwNjQ3ODcyMQ@@._V1_SX400_.jpg", "plot": "A young couple struggles to repair a hopelessly dilapidated house.", "title": "The Money Pit", "rank": 4095, "running_time_secs": 5460, "actors": [ "Tom Hanks", "Shelley Long", "Alexander Godunov" ], "year": 1986, "id": "tt0091541" }, "highlight": { "plot": [ "A young couple struggles to repair a hopelessly dilapidated <em>house</em>." ] } }

Per impostazione predefinita, OpenSearch racchiude la stringa corrispondente in tag <em>, fornisce fino a 100 caratteri di contesto attorno alla corrispondenza e suddivide il contenuto in frasi identificando segni di punteggiatura, spazi, tabulazioni e interruzioni di riga. Tutte queste impostazioni sono personalizzabili:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_search { "size": 20, "query": { "multi_match": { "query": "house", "fields": ["title^4", "plot^2", "actors", "directors"] } }, "highlight": { "fields": { "plot": {} }, "pre_tags": "<strong>", "post_tags": "</strong>", "fragment_size": 200, "boundary_chars": ".,!? " } }

API conteggio

Se non sei interessato ai contenuti dei documenti e desideri solo conoscere il numero di corrispondenze, puoi utilizzare l'API _count anziché l'API _search. La seguente richiesta utilizza la query query_string per identificare commedie romantiche:

POST https://search-my-domain.us-west-1.es.amazonaws.com/movies/_count { "query": { "query_string": { "default_field": "genres", "query": "romance AND comedy" } } }

L'aspetto di una risposta di esempio è simile al seguente:

{ "count": 564, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 } }