_____ _ _ ____ _____ ___ ____ ____ ___ _
| ____| | / / ___|_ _|_ _|/ ___|/ ___| / _ | |
| _| | | / _ ___ | | | || | ___ | | | || |
| |___| |___ / ___ ___) || | | || |___ ___) | |_| || |___
|_____|_____|/_/ _|____/ |_| |___|____||____/ ___|_____|
Cet outil convertit SQL en ElasticSearch DSL
Supporte actuellement :
allez chercher -u github.com/cch123/elasticsql
Démo :
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 )
}
produira :
{
"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
Si votre SQL contient des mots-clés, par exemple. ordre, horodatage, n'oubliez pas d'échapper ces champs comme suit :
select * from `order` where `timestamp` = 1 and `desc`.id > 0
Pour utiliser cet outil, vous devez comprendre le terme requête et la requête de correspondance d'expression d'elasticsearch.
Définir un champ sur analysé ou non analysé obtiendra des résultats différents.
Pour plus de détails sur la conversion, veuillez vous référer au wiki
Lors de l'écriture de cet outil, j'ai essayé d'éviter les filtres et agrégations DSL obsolètes, afin qu'il soit compatible avec la plupart des versions d'elasticsearch.
Si vous avez des conseils ou des idées, n'hésitez pas à soumettre un problème ou une Pull Request !
MIT