이것은 작은 API이지만 특히 SQL 데이터베이스를 사용하는 개발자에게 매우 유용한 도구입니다. 또한 SQL 쿼리를 해당 검색 쿼리와 빠르게 연결하여 학습 곡선을 줄일 수 있습니다.
그런 다음 Elasticsearch 검색 API의 전체 기능과 지원되는 쿼리 언어를 탐색할 수 있습니다.
Elasticsearch는 SQL을 지원하지만 다양한 제한 사항이 있음을 명심하십시오.
쿼리 구문
다음은 번역 API의 구문을 보여줍니다.
GET _sql/번역
{
요청_바디
}
다음 구문과 같이 번역 API에 게시 요청을 보낼 수도 있습니다.
POST _sql/번역
{
요청_바디
}
클러스터 구성에 따라 API는 쿼리하려는 데이터가 있는 인덱스에 대한 읽기 권한이 필요할 수 있습니다. 대상 리소스를 인덱스 별칭 또는 데이터 스트림으로 지정할 수도 있습니다.
request_body에서 모든 SQL Search API 요청 본문 매개변수를 지정할 수 있습니다. 자세히 알아보려면 다음 리소스에 제공된 문서를 살펴보세요.
응답으로 쿼리는 쿼리된 데이터와 함께 검색 API에 해당하는 결과를 반환해야 합니다.
예시
이 API를 사용하는 방법을 가장 잘 설명하기 위해 Netflix 영화 및 TV 프로그램에 대한 모든 데이터를 포함하는 'netflix'라는 인덱스가 있다고 가정합니다.
2020년 이상에 출시한 Netflix 인덱스에서 상위 5개 영화를 가져오려고 한다고 가정해 보겠습니다.
이에 상응하는 SQL 쿼리는 다음과 같이 표현할 수 있습니다.
SELECT 제목, 기간, 등급, 유형 FROM netflix WHERE 유형 = '영화' 그리고 출시년도 >= 2020년Elasticsearch에서 위의 SQL 검색을 실행하기 위해 아래와 같이 SQL 검색 API에 넣을 수 있습니다.
컬 -XGET “http://localhost:9200/_sql?format=txt” -시간 'kbn-xsrf: 보고' -시간 '콘텐츠 유형: 애플리케이션/json' -디 '{
'쿼리': ' \N SELECT 제목, 기간, 등급, FROM 'netflix' WHERE type = ' \ '' 영화 ' \' ' 그리고 출시년도 >= 2020년 \N ',
' 가져오기_크기 ': 5
}'
이전 요청은 인덱스를 쿼리하고 일치하는 레코드를 가져와야 합니다. 반환 출력은 아래와 같이 텍스트 형식입니다.
보시다시피 Elasticsearch는 예상 출력을 반환합니다.
출력을 JSON으로 반환하려면 아래와 같이 형식을 JSON으로 설정할 수 있습니다.
컬 -XGET 'http://localhost:9200/_sql?format=json' -시간 'kbn-xsrf: 보고' -시간 '콘텐츠 유형: 애플리케이션/json' -디 '{
'쿼리': ' \N SELECT 제목, 기간, 등급, FROM 'netflix' WHERE type = ' \ '' 영화 ' \' ' 그리고 출시년도 >= 2020년 \N ',
' 가져오기_크기 ': 5
}'
산출:
SQL 쿼리를 검색 요청으로 변환
이전 SQL 검색 쿼리를 Elasticsearch 요청으로 변환하기 위해 아래와 같이 변환 API에 전달할 수 있습니다.
컬 -XGET 'http://localhost:9200/_sql/translate' -시간 'kbn-xsrf: 보고' -시간 '콘텐츠 유형: 애플리케이션/json' -디 '{
'쿼리': ' \N SELECT 제목, 기간, 등급, FROM 'netflix' WHERE type = ' \ '' 영화 ' \' ' 그리고 출시년도 >= 2020년 \N ',
' 가져오기_크기 ': 5
}'
API는 다음 출력과 같이 입력 SQL 입력을 구문 분석하고 유효한 검색 요청으로 변환해야 합니다.
{'크기' : 5 ,
'질문' : {
'불' : {
'해야 하다' : [
{
'기간' : {
'유형' : {
'값' : '영화'
}
}
},
{
'범위' : {
'release_year' : {
'그게' : 2020년 ,
'후원' : 1
}
}
}
],
'후원' : 1
}
},
'_원천' : 거짓,
'필드' : [
{
'필드' : '제목'
},
{
'필드' : '지속'
},
{
'필드' : '평가'
},
{
'필드' : '유형'
}
],
'종류' : [
{
'_문서' : {
'주문하다' : '오름차순'
}
}
]
}
그런 다음 이 요청 형식을 사용하여 아래와 같이 Elasticsearch 검색 API로 보낼 수 있습니다.
컬 -XPOST 'http://localhost:9200/netflix/_search' -시간 'kbn-xsrf: 보고' -시간 '콘텐츠 유형: 애플리케이션/json' -디 '{
'크기': 5,
'쿼리': {
'부울': {
'해야 하다': [
{
'기간': {
'유형': {
'값': '영화'
}
}
},
{
'범위': {
'release_year': {
'gte': 2020,
'부스트': 1
}
}
}
],
'부스트': 1
}
},
'_source': 거짓,
'필드': [
{
'필드': '제목'
},
{
'필드': '기간'
},
{
'필드': '등급'
},
{
'필드': '유형'
}
],
'종류': [
{
'_문서': {
'주문': '오름차순'
}
}
]
}'
마찬가지로 요청은 아래와 같이 유사한 데이터를 반환해야 합니다.
결론
이 게시물을 통해 SQL 쿼리를 사용하여 기존 Elasticsearch 인덱스에서 데이터를 가져오는 방법을 발견했습니다. 또한 SQL API 번역을 사용하여 유효한 SQL 쿼리를 Elasticsearch 요청으로 변환하는 방법을 배웠습니다.