elasticsql
1.0.1
_____ _ _ ____ _____ ___ ____ ____ ___ _
| ____| | / / ___|_ _|_ _|/ ___|/ ___| / _ | |
| _| | | / _ ___ | | | || | ___ | | | || |
| |___| |___ / ___ ___) || | | || |___ ___) | |_| || |___
|_____|_____|/_/ _|____/ |_| |___|____||____/ ___|_____|
이 도구는 sql을 elasticsearch dsl로 변환합니다.
현재 지원되는 것:
가서 -u github.com/cch123/elasticsql을 얻으십시오.
데모:
package main
import (
"fmt"
"github.com/cch123/elasticsql"
)
var sql = `
select * from aaa
where a=1 and x = '三个男人'
and create_time between '2015-01-01T00:00:00+0800' and '2016-01-01T00:00:00+0800'
and process_id > 1 order by id desc limit 100,10
`
func main () {
dsl , esType , _ := elasticsql . Convert ( sql )
fmt . Println ( dsl )
fmt . Println ( esType )
}
생산할 것입니다 :
{
"query" : {
"bool" : {
"must" : [
{
"match" : {
"a" : {
"query" : " 1 " ,
"type" : " phrase "
}
}
},
{
"match" : {
"x" : {
"query" : "三个男人" ,
"type" : " phrase "
}
}
},
{
"range" : {
"create_time" : {
"from" : " 2015-01-01T00:00:00+0800 " ,
"to" : " 2016-01-01T00:00:00+0800 "
}
}
},
{
"range" : {
"process_id" : {
"gt" : " 1 "
}
}
}
]
}
},
"from" : 100 ,
"size" : 10 ,
"sort" : [
{
"id" : " desc "
}
]
}
aaa
SQL에 일부 키워드가 포함되어 있는 경우. 순서, 타임스탬프, 이러한 필드를 다음과 같이 이스케이프 처리하는 것을 잊지 마세요.
select * from `order` where `timestamp` = 1 and `desc`.id > 0
이 도구를 사용하려면 Elasticsearch의 용어 쿼리와 일치 구문 쿼리에 대한 이해가 필요합니다.
분석되거나 분석되지 않도록 필드를 설정하면 다른 결과가 나타납니다.
변환에 대한 자세한 내용은 위키를 참조하세요.
이 도구를 작성할 때 더 이상 사용되지 않는 dsl 필터 및 집계를 피하려고 노력했기 때문에 대부분의 elasticsearch 버전과 호환됩니다.
조언이나 아이디어가 있으시면 이슈나 Pull Request 제출을 환영합니다!
MIT