기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon OpenSearch 서비스에서 데이터 검색
Amazon OpenSearch Service에서는 검색 및 요청 본문 URI 검색을 비롯하여 여러 가지 일반적인 방법으로 문서를 검색할 수 있습니다. OpenSearch 서비스는 사용자 지정 패키지, SQL 지원, 비동기 검색과 같은 검색 환경을 개선하는 추가 기능을 제공합니다. 포괄적인 OpenSearch 검색 API 참조는 설명서를 참조하십시오. OpenSearch
참고
다음 샘플 요청과 함께 사용할 수 OpenSearch APIs 있습니다. 일부 요청은 이전 버전의 Elasticsearch에서 작동하지 않을 수 있습니다.
주제
- URI검색
- 요청 본문 검색
- 검색 결과 페이지 매김
- Dashboards Query Language
- 아마존 OpenSearch 서비스용 커스텀 패키지
- SQL을 사용하여 아마존 OpenSearch 서비스 데이터 쿼리
- 아마존 서비스의 K-최근접이웃 (k-nn) 검색 OpenSearch
- Amazon OpenSearch 서비스의 클러스터 간 검색
- Amazon OpenSearch 서비스 순위 매기기 배우기
- 아마존 서비스에서의 비동기 검색 OpenSearch
- Amazon OpenSearch 서비스의 특정 시점 검색
- Amazon 서비스에서의 시맨틱 검색 OpenSearch
- 아마존 OpenSearch 서비스에서의 동시 세그먼트 검색
- 를 사용한 자연어 쿼리 생성 OpenSearch
URI검색
범용 리소스 식별자 (URI) 검색은 가장 간단한 검색 형식입니다. URI검색에서는 쿼리를 HTTP 요청 매개변수로 지정합니다.
GET https://search-
my-domain
.us-west-1.
es.amazonaws.com/_search?q=house
샘플 응답은 다음과 같습니다.
{
"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"
}
},
...
]
}
}
기본적으로 이 쿼리는 모든 색인의 모든 필드에서 검색어 house를 검색합니다. 검색 범위를 좁히려면 다음 위치에 색인 (movies
) 과 문서 필드 (title
) 를 지정하십시오URI.
GET https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search?q=title:house
요청에 추가 매개변수를 포함할 수 있지만 지원되는 매개변수는 OpenSearch 검색 옵션의 일부분만 제공합니다. 다음 요청은 20개 결과(기본 개수 10개가 아님)를 반환하고 연도 기준으로 정렬합니다(_score
기준이 아님).
GET https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_search?q=title:house&size=20&sort=year:desc
요청 본문 검색
더 복잡한 검색을 수행하려면 HTTP 요청 본문과 쿼리용 OpenSearch 도메인별 언어 () DSL 를 사용하십시오. 쿼리를 DSL 사용하면 전체 범위의 OpenSearch 검색 옵션을 지정할 수 있습니다.
참고
텍스트 필드 값에 유니코드 특수 문자를 포함할 수 없습니다. 포함하면 값이 특수 문자로 구분된 여러 값으로 구문 분석됩니다. 이렇게 잘못된 구문 분석으로 인해 의도하지 않은 문서 필터링이 발생하여 문서 액세스에 대한 제어가 손상될 수 있습니다. 자세한 내용은 OpenSearch설명서에서 텍스트 필드의 유니코드 특수 문자에 대한 참고 사항을
다음 match
쿼리는 최종 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" } } }
참고
request HTTP GET
및 POST
for 요청 본문 검색은 가능하지만 모든 HTTP 클라이언트가 요청에 요청 본문을 추가하는 것을 지원하는 것은 GET
아닙니다. _search
API POST
가 더 보편적인 선택입니다.
많은 경우에 전체 필드는 아니지만 여러 필드를 검색해야 합니다. 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"] } } }
필드 부스팅
특정 필드를 "부스팅"하여 검색 관련성을 개선할 수 있습니다. 부스트는 한 필드의 일치 항목을 다른 필드의 일치 항목보다 가중하는 배수입니다. 다음 예제에서 title
필드의 john에 대한 일치 항목은 plot
필드의 일치 항목보다 두 배, actors
또는 directors
필드의 일치 항목보다 네 배 많이 _score
에 영향을 미칩니다. 그러면 결과에서 John Wick, John Carter 같은 영화는 검색 결과의 거의 맨 위에 있고, John Travolta가 주인공인 영화는 거의 맨 아래에 있습니다.
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"] } } }
검색 결과 강조 표시
highlight
옵션은 쿼리가 하나 이상의 필드와 일치하는 경우 hits
배열 내에 추가 객체를 OpenSearch 반환하도록 지시합니다.
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": {} } } }
쿼리가 plot
의 내용과 일치할 경우 히트는 다음과 같이 표시됩니다.
{
"_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>."
]
}
}
기본적으로 는 일치하는 문자열을 <em>
태그로 OpenSearch 감싸고, 일치 항목에 대해 최대 100자의 컨텍스트를 제공하며, 구두점, 공백, 탭 및 줄 바꿈을 식별하여 내용을 문장으로 나눕니다. 이러한 설정은 모두 사용자 지정이 가능합니다.
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
문서 내용에 관심이 없고 일치하는 개수만 알고 싶다면 _count
API 대신 를 사용할 수 있습니다 _search
API. 다음 요청에서는 query_string
쿼리를 사용하여 로맨틱 코미디를 식별합니다.
POST https://search-
my-domain
.us-west-1.
es.amazonaws.com/movies/_count { "query": { "query_string": { "default_field": "genres", "query": "romance AND comedy" } } }
샘플 응답은 다음과 같습니다.
{
"count": 564,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
}
}
검색 결과 페이지 매김
많은 수의 검색 결과를 표시해야 하는 경우 파라미터를 사용하여 페이지 매김을 구현할 수 있습니다.
특정 시점
포인트 인 타임 (PIT) 기능은 시간이 고정된 데이터세트에 대해 다양한 쿼리를 실행할 수 있는 검색 유형입니다. 이 방법은 에서 선호되는 페이지 매김 방식이며 OpenSearch, 특히 심층 페이지 매김의 경우 더욱 그렇습니다. OpenSearch 서비스 버전 2.5 PIT 이상에서 사용할 수 있습니다. 에 대한 자세한 내용은 PIT 을 참조하십시오Amazon OpenSearch 서비스의 특정 시점 검색.
from
파라미터를 size
추가합니다.
페이지를 매기는 가장 간단한 방법은 from
및 size
파라미터를 사용하는 것입니다. 다음 요청은 검색 결과의 0 기반 인덱스 목록에서 20~39개 결과를 반환합니다.
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"] } } }
검색 페이지 매김에 대한 자세한 내용은 설명서의 결과 페이지 매김을
Dashboards Query Language
대시보드 쿼리 언어 (DQL) 를 사용하여 대시보드에서
용어 쿼리
용어 쿼리를 사용하려면 검색하려는 용어를 지정해야 합니다.
용어 쿼리를 수행하려면 다음을 입력합니다.
host:www.example.com
부울 쿼리
부울 연산자 AND
, or
및 not
을 사용하여 여러 쿼리를 결합할 수 있습니다.
부울 쿼리를 수행하려면 다음을 붙여 넣습니다.
host.keyword:www.example.com and response.keyword:200
날짜 및 범위 쿼리
날짜 및 범위 쿼리를 사용하여 쿼리 전후의 날짜를 찾을 수 있습니다.
-
>
는 지정한 날짜 후의 날짜 검색을 나타냅니다. -
<
는 지정한 날짜 전의 날짜 검색을 나타냅니다.
@timestamp > "2020-12-14T09:35:33"
중첩 필드 쿼리
문서에 중첩 필드가 있는 경우 검색할 문서 부분을 지정해야 합니다. 다음은 중첩 필드가 있는 샘플 문서입니다.
{"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" } ] }
를 사용하여 DQL 특정 필드를 검색하려면 다음을 붙여넣으세요.
NBA players: {player-name: Lebron James}
중첩 문서에서 여러 객체를 검색하려면 다음을 붙여 넣습니다.
NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo}
범위 내에서 검색하려면 다음을 붙여 넣습니다.
NBA players: {player-name: Lebron James} and NBA players: {player-name: Giannis Antetokounmpo and < 30}
문서에 다른 객체 내에 중첩된 객체가 있는 경우에도 모든 수준을 지정하여 데이터를 검색할 수 있습니다. 이렇게 하려면 다음을 붙여 넣습니다.
Top-Power-forwards.NBA players: {player-name:Lebron James}