_____ _ _ ____ _____ ___ ____ ____ ___ _
| ____| | / / ___|_ _|_ _|/ ___|/ ___| / _ | |
| _| | | / _ ___ | | | || | ___ | | | || |
| |___| |___ / ___ ___) || | | || |___ ___) | |_| || |___
|_____|_____|/_/ _|____/ |_| |___|____||____/ ___|_____|
Dieses Tool konvertiert SQL in Elasticsearch DSL
Unterstützt derzeit:
Holen Sie sich -u github.com/cch123/elasticsql
Demo:
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 )
}
wird produzieren:
{
"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
Wenn Ihr SQL einige Schlüsselwörter enthält, z. Reihenfolge, Zeitstempel, vergessen Sie nicht, diese Felder wie folgt zu maskieren:
select * from `order` where `timestamp` = 1 and `desc`.id > 0
Um dieses Tool verwenden zu können, müssen Sie die Begriffsabfrage und die Übereinstimmungsphrasenabfrage von Elasticsearch verstehen.
Wenn Sie ein Feld auf „Analysiert“ oder „Nicht analysiert“ festlegen, erhalten Sie unterschiedliche Ergebnisse.
Weitere Einzelheiten zur Konvertierung finden Sie im Wiki
Beim Schreiben dieses Tools habe ich versucht, die veralteten DSL-Filter und -Aggregationen zu vermeiden, damit es mit den meisten Versionen von Elasticsearch kompatibel ist
Wenn Sie Ratschläge oder Ideen haben, können Sie gerne ein Problem oder eine Pull-Anfrage einreichen!
MIT