Elasticsearch SQL 번역 API

Elasticsearch Sql Beon Yeog Api



이 게시물에서는 SQL 검색을 JSON 기반 전체 쿼리 도메인 특정 언어를 포함하는 유효한 Elasticsearch 검색 API 요청으로 변환하는 방법을 배웁니다.

이것은 작은 API이지만 특히 SQL 데이터베이스를 사용하는 개발자에게 매우 유용한 도구입니다. 또한 SQL 쿼리를 해당 검색 쿼리와 빠르게 연결하여 학습 곡선을 줄일 수 있습니다.

그런 다음 Elasticsearch 검색 API의 전체 기능과 지원되는 쿼리 언어를 탐색할 수 있습니다.







Elasticsearch는 SQL을 지원하지만 다양한 제한 사항이 있음을 명심하십시오.



쿼리 구문

다음은 번역 API의 구문을 보여줍니다.



GET _sql/번역

{

요청_바디

}

다음 구문과 같이 번역 API에 게시 요청을 보낼 수도 있습니다.





POST _sql/번역

{

요청_바디

}

클러스터 구성에 따라 API는 쿼리하려는 데이터가 있는 인덱스에 대한 읽기 권한이 필요할 수 있습니다. 대상 리소스를 인덱스 별칭 또는 데이터 스트림으로 지정할 수도 있습니다.

request_body에서 모든 SQL Search API 요청 본문 매개변수를 지정할 수 있습니다. 자세히 알아보려면 다음 리소스에 제공된 문서를 살펴보세요.



https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html#sql-search-api-request-body

응답으로 쿼리는 쿼리된 데이터와 함께 검색 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 요청으로 변환하는 방법을 배웠습니다.