Pesquisa de dados no Amazon OpenSearch Service - OpenSearch Serviço Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Pesquisa de dados no Amazon OpenSearch Service

Existem vários métodos comuns para pesquisa de documentos no Amazon OpenSearch Service, incluindo pesquisas de URI e pesquisas de corpo da solicitação. O OpenSearch Service oferece funcionalidade adicional que melhora a experiência de pesquisa, como pacotes personalizados, suporte a SQL e pesquisa assíncrona. Para obter uma referência abrangente da API de pesquisa do OpenSearch, consulte a documentação do OpenSearch.

nota

As solicitações de exemplo a seguir funcionam com APIs do OpenSearch. Algumas solicitações podem não funcionar com versões mais antigas do Elasticsearch.

Pesquisas de URI

As pesquisas do URI (Universal Resource Identifier, Identificador de recurso universal) são a forma mais simples de pesquisa. Em uma pesquisa do URI, você especifica a consulta como um parâmetro de solicitação HTTP.

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

Uma resposta de exemplo pode ser a seguinte:

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

Por padrão, essa consulta pesquisa todos os campos de todos os índices do termo casa. Para restringir a pesquisa, especifique um índice (movies) e um campo de documento (title) no URI:

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

Você pode incluir parâmetros adicionais na solicitação, mas os parâmetros compatíveis fornecem apenas um pequeno subconjunto das opções de pesquisa do OpenSearch. A solicitação a seguir retorna 20 resultados (em vez do padrão de 10) e classifica por ano (em vez de por _score):

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

Pesquisas de corpo da solicitação

Para realizar pesquisas mais complexas, use o corpo da solicitação HTTP e o idioma específico do domínio (DSL) do OpenSearch para realizar consultas. A consulta DSL permite especificar a gama completa de opções de pesquisa do OpenSearch.

nota

Você não pode incluir caracteres especiais Unicode em um valor de campo de texto, ou o valor será analisado como vários valores separados pelo caractere especial. Essa análise incorreta pode levar à filtragem não intencional de documentos e potencialmente comprometer o controle sobre seu acesso. Para obter mais informações, consulte Uma nota sobre caracteres especiais Unicode em campos de texto na documentação do OpenSearch.

A consulta match a seguir é semelhante ao exemplo de pesquisa final do URI:

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

A API _search aceita HTTPGET e POST para pesquisas de corpo de solicitação, mas nem todos os clientes HTTP suportam a adição de um corpo de solicitação a uma solicitação GET. POST é a escolha mais universal.

Em muitos casos, você pode pesquisar vários campos, mas não todos os campos. Use a 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"] } } }

Impulsão de campos

Você pode melhorar a relevância de pesquisa "aumentando" determinados campos. Boosts são multiplicadores que ponderam os resultados em um campo maior do que os correspondentes em outros campos. No exemplo a seguir, uma correspondência para john no campo title influencia _score duas vezes mais que uma correspondência no campo plot e quatro vezes mais que uma correspondência nos campos actors ou directors. O resultado é que filmes como John Wick e John Carter estão próximos do topo dos resultados de busca, e filmes estrelados por John Travolta estão quase no fim.

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

Destaques de resultados da pesquisa

A opção highlight informa ao OpenSearch para retornar um objeto adicional dentro da matriz hits se a consulta corresponder a um ou mais 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": {} } } }

Se a consulta corresponder ao conteúdo do campo plot, um resultado pode ser semelhante ao seguinte:

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

Por padrão, o OpenSearch agrupa a string correspondente em tags <em>, fornece até 100 caracteres de contexto da correspondência e divide o conteúdo em sentenças, identificando sinais de pontuação, espaços, tabulações e quebras de linha. Todas estas configurações são personalizáveis:

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 contagem

Se você não estiver interessado no conteúdo de seus documentos e quiser apenas saber o número de correspondências, poderá usar a API _count em vez da API _search. A solicitação a seguir usa a consulta query_string para identificar comédias 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" } } }

Uma resposta de exemplo pode ser a seguinte:

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

Paginação de resultados da pesquisa

Se precisar exibir um grande número de resultados de pesquisa, você poderá implementar a paginação usando vários métodos diferentes.

Ponto de tempo

O atributo point in time (PIT – um ponto no tempo) é um tipo de pesquisa que permite executar consultas diferentes em um conjunto de dados fixo no tempo. Esse é o método de paginação preferido no OpenSearch, especialmente para paginação profunda. Você pode usar o PIT com o OpenSearch Service versão 2.5 e posterior. Para ter mais informações sobre o PIT, consulte Pesquisa de ponto de tempo no Amazon OpenSearch Service.

Os parâmetros from e size.

A maneira mais simples de paginar é com os parâmetros from e size. A seguinte solicitação retorna resultados de 20 a 39 da lista indexada zero de resultados da pesquisa:

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 obter mais informações sobre paginação de pesquisa, consulte Resultados de paginação na documentação do OpenSearch.

Dashboards Query Language

É possível usar a Dashboards Query Language (DQL) para pesquisar dados e visualizações no OpenSearch Dashboaords. A DQL usa quatro tipos de consulta principais:termos, boleana, data e intervalo e campo aninhado.

Consulta de termos

Uma consulta de termos exige que você especifique o termo que está procurando.

Para executar uma consulta de termos, insira o seguinte:

host:www.example.com

Consulta booleana

É possível usar os operadores booleanos AND, or e not para combinar várias consultas.

Para executar uma consulta booleana, cole o seguinte:

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

Consulta de data e intervalo

Você pode usar uma consulta de data e intervalo para encontrar uma data antes ou depois da consulta.

  • > indica uma pesquisa por uma data posterior à data especificada.

  • < indica uma pesquisa por uma data anterior à data especificada.

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

Consulta de campo aninhado

Se você tiver um documento com campos aninhados, será necessário especificar quais partes do documento você deseja recuperar. Veja a seguir um exemplo de documento que contém campos aninhados:

{"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 um campo específico usando DQL, cole o seguinte:

NBA players: {player-name: Lebron James}

Para recuperar vários objetos do documento aninhado, cole o seguinte:

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

Para pesquisar em um intervalo, cole o seguinte:

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

Se o documento tiver um objeto aninhado em outro objeto, você ainda poderá recuperar dados especificando todos os níveis. Para fazer isso, cole o seguinte:

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