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.
Tópicos
- Pesquisas de URI
- Pesquisas de corpo da solicitação
- Paginação de resultados da pesquisa
- Dashboards Query Language
- Pacotes personalizados para o Amazon OpenSearch Service
- Consulta dos dados do Amazon OpenSearch Service com SQL
- Pesquisa de k-vizinhos mais próximos (k-NN) no Amazon OpenSearch Service
- Pesquisa entre clusters no Amazon OpenSearch Service
- Learning to Rank para Amazon OpenSearch Service
- Pesquisa assíncrona no Amazon OpenSearch Service
- Pesquisa de ponto de tempo no Amazon OpenSearch Service
- Pesquisa semântica no Amazon OpenSearch Service
- Pesquisa simultânea de segmentos no Amazon OpenSearch Service
- Geração de consultas em linguagem natural com o OpenSearch
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
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
Dashboards Query Language
É possível usar a Dashboards Query Language (DQL)
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}