Amazon OpenSearch Service의 데이터 검색 - Amazon OpenSearch 서비스

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon OpenSearch Service의 데이터 검색

URI 검색 및 요청 본문 검색을 포함하여 Amazon OpenSearch Service에서 문서를 검색하는 몇 가지 일반적인 방법이 있습니다. OpenSearch Service는 사용자 지정 패키지, SQL 지원 및 비동기 검색과 같은 검색 환경을 개선하는 추가 기능을 제공합니다. 포괄적인 OpenSearch 검색 API 참조는 OpenSearch 설명서를 참조하세요.

참고

다음 샘플 요청은 OpenSearch API에서 작동합니다. 일부 요청은 이전 버전의 Elasticsearch에서 작동하지 않을 수 있습니다.

URI 검색

URI(Universal Resource Identifier) 검색은 가장 단순한 형태의 검색입니다. 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를 검색합니다. 검색 범위를 좁히려면 URI에서 색인(movies) 및 문서 필드(title)를 지정합니다.

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(Domain-Specific Language)을 사용합니다. 쿼리 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" } } }
참고

_search API는 요청 본문 검색에 HTTP GETPOST를 허용하지만, 모든 HTTP 클라이언트가 GET 요청에 요청 본문을 추가하는 것을 지원하지는 않습니다. 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>." ] } }

기본적으로 OpenSearch는 일치 문자열을 <em> 태그로 묶고, 일치 항목 주위로 최대 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": ".,!? " } }

Count API

문서 내용에는 관심이 없고 일치 항목 수만 알고 싶은 경우 _search API 대신 _count 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에서 선호되는 페이지 매김 메서드이며, 특히 심층 페이지 매김의 경우 더욱 그렇습니다. PIT는 OpenSearch Service 버전 2.5 이상에서 사용할 수 있습니다. ACL에 대한 자세한 내용은 Amazon OpenSearch Service의 특정 시점 검색 단원을 참조하세요.

from 파라미터를 size 추가합니다.

페이지를 매기는 가장 간단한 방법은 fromsize 파라미터를 사용하는 것입니다. 다음 요청은 검색 결과의 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"] } } }

검색 페이지 매김에 대한 자세한 내용은 OpenSearch 설명서의 결과 페이지 매김을 참조하세요.

Dashboards Query Language

Dashboards Query Language(DQL)를 사용하여 OpenSearch Dashboards에서 데이터와 시각화를 검색할 수 있습니다. DQL은 용어, 부울, 날짜 및 범위, 중첩 필드의 4가지 기본 쿼리 유형을 사용합니다.

용어 쿼리

용어 쿼리를 사용하려면 검색하려는 용어를 지정해야 합니다.

용어 쿼리를 수행하려면 다음을 입력합니다.

host:www.example.com

부울 쿼리

부울 연산자 AND, ornot을 사용하여 여러 쿼리를 결합할 수 있습니다.

부울 쿼리를 수행하려면 다음을 붙여 넣습니다.

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}