Buscar datos en Amazon OpenSearch Service - OpenSearch Servicio Amazon

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Buscar datos en Amazon OpenSearch Service

Existen varios métodos habituales de búsqueda de documentos en Amazon OpenSearch Service, incluidas las búsquedas de URI y las búsquedas de cuerpos de la solicitud. OpenSearch Service ofrece funcionalidad adicional que mejora la experiencia de búsqueda, como paquetes personalizados, compatibilidad con SQL y búsqueda asincrónica. Para ver una referencia de la API de búsqueda de OpenSearch completa, consulte la documentación de OpenSearch.

nota

Las siguientes solicitudes de muestra funcionan con las API de OpenSearch. Algunas solicitudes podrían no funcionar con versiones anteriores de Elasticsearch.

Búsquedas de URI

Las búsquedas de identificador de recursos universal (URI) son la forma más sencilla de búsqueda. En una búsqueda de URI, hay que especificar la consulta como un parámetro de solicitud HTTP:

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

Una respuesta de muestra tendría el siguiente aspecto:

{ "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" } }, ... ] } }

De forma predeterminada, esta consulta realiza búsquedas en todos los campos de todos los índices para encontrar el término house. Para aportar más precisión a la búsqueda, especifique un índice (movies) y un campo de documento (title) en el URI:

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

Puede incluir parámetros adicionales en la solicitud, pero los parámetros compatibles proporcionan solo un pequeño subconjunto de opciones de búsqueda de OpenSearch. La siguiente solicitud devuelve 20 resultados (en vez de los 10 predeterminados) y los clasifica por año (en vez de clasificarlos por _score):

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

Búsquedas de cuerpo de la solicitud

A fin de realizar búsquedas más complejas, utilice el cuerpo de la solicitud HTTP y el lenguaje específico de dominio (DSL) de OpenSearch para realizar las consultas. El DSL de la consulta permite especificar la gama completa de opciones de búsqueda de OpenSearch.

nota

No puede incluir caracteres especiales Unicode en el valor de un campo de texto, o el valor se analizará como varios valores separados por el carácter especial. Este análisis incorrecto puede provocar un filtrado involuntario de los documentos y comprometer potencialmente el control sobre su acceso. Para más información, consulte Nota sobre los caracteres especiales Unicode en los campos de texto de la documentación de OpenSearch.

La siguiente consulta de match es similar al ejemplo de búsqueda de URI final:

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

La API de _search acepta GET y POST HTTP para búsquedas del cuerpo de la solicitud, pero no todos los clientes HTTP admiten la adición de un cuerpo de la solicitud a una solicitud GET. POST es la opción más universal.

En muchos casos, es posible que desee buscar varios campos, pero no todos los campos. Utilice la consulta 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"] } } }

Potenciar campos

Puede mejorar la relevancia de la búsqueda mediante la “potenciación” de ciertos campos. Los potenciadores son multiplicadores que dan mayor peso a las coincidencias en un campo que a las de otros campos. En el siguiente ejemplo, una coincidencia de john en el campo title tiene el doble de peso en _score que una coincidencia en el campo plot y cuatro veces más que otra en los campos actors o directors. El resultado es que películas como John Wick y John Carter están cerca de los primeros resultados de búsqueda y las películas protagonizadas por John Travolta están casi al final.

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"] } } }

Resaltado de resultados de búsqueda

La opción highlight indica a OpenSearch que devuelva un objeto adicional dentro de la matriz hits si la consulta coincide con uno o más campos:

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": {} } } }

Si la consulta coincide con el contenido del campo plot, un acierto podría tener el siguiente aspecto:

{ "_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>." ] } }

De forma predeterminada, OpenSearch incluye la cadena coincidente entre etiquetas <em>, proporciona hasta 100 caracteres de contexto en torno a la coincidencia y desglosa el contenido en frases mediante la identificación de signos de puntuación, espacios, tabulaciones y saltos de línea. Todas estas configuraciones son personalizables:

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 de recuento

Si no está interesado en el contenido de sus documentos y solo quiere saber el número de coincidencias, puede utilizar la API de _count en lugar de la API de _search. En la siguiente solicitud, se utiliza la consulta query_string para identificar comedias románticas:

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

Una respuesta de muestra tendría el siguiente aspecto:

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

Paginar los resultados de búsqueda

Si necesita mostrar un gran número de resultados de búsqueda, puede implementar la paginación usando varios métodos diferentes.

Punto en el tiempo

La característica de punto en el tiempo (PIT) es un tipo de búsqueda que permite ejecutar diferentes consultas en un conjunto de datos fijo en el tiempo. Este es el método de paginación preferido en OpenSearch, especialmente para la paginación profunda. Puede usar PIT con OpenSearch Service, versión 2.5 y versiones posteriores. Para más información sobre PITR, consulte Punto en el tiempo en Amazon OpenSearch Service.

Añada los parámetros from y size.

La forma más sencilla de paginar es con los parámetros from y size. La siguiente solicitud devuelve los resultados 20-39 de la lista de resultados de búsqueda indexada a cero:

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"] } } }

Para ver más información sobre la paginación de búsquedas, consulte Paginar los resultados en la documentación de OpenSearch.

Lenguaje de consulta de paneles

Puede utilizar el Lenguaje de consulta de paneles (DQL) para buscar datos y visualizaciones en los paneles de OpenSearch. DQL utiliza cuatro tipos de consultas principales: términos, booleano, fecha e intervalo y campo anidado.

Consulta de términos

Una consulta de términos requiere que se especifique el término que se busca.

Para llevar a cabo una consulta de términos, ingrese lo siguiente:

host:www.example.com

Consulta booleana

Puede utilizar los operadores booleanos AND, or y not para combinar varias consultas.

Para llevar a cabo una consulta booleana, pegue lo siguiente:

host.keyword:www.example.com and response.keyword:200

Consulta de fecha e intervalo

Puede utilizar una consulta de fecha e intervalo para buscar una fecha anterior o posterior a la consulta.

  • > indica una búsqueda de una fecha posterior a la fecha especificada.

  • < indica una búsqueda de una fecha anterior a la fecha especificada.

@timestamp > "2020-12-14T09:35:33"

Consulta de campo anidada

Si tiene un documento con campos anidados, debe especificar qué partes del documento desea recuperar. A continuación, se muestra un documento de muestra con campos anidados:

{"NBA players":[ {"player-name": "Lebron James", "player-position": "Power forward", "points-per-game": "30.3" }, {"player-name": "Kevin Durant", "player-position": "Power forward", "points-per-game": "27.1" }, {"player-name": "Anthony Davis", "player-position": "Power forward", "points-per-game": "23.2" }, {"player-name": "Giannis Antetokounmpo", "player-position": "Power forward", "points-per-game":"29.9" } ] }

Para recuperar un campo específico con DQL, pegue lo siguiente:

NBA players: {player-name: Lebron James}

Para recuperar varios objetos del documento anidado, pegue lo siguiente:

NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo}

Para buscar dentro de un intervalo, pegue lo siguiente:

NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo and < 30}

Si el documento tiene un objeto anidado dentro de otro objeto, aún puede recuperar datos especificando todos los niveles. Para ello, pegue lo siguiente:

Top-Power-forwards.NBA players: {player-name:Lebron James}