Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

convert sql to elasticsearch DSL in golang(go)

License

NotificationsYou must be signed in to change notification settings

cch123/elasticsql

Repository files navigation

 _____ _         _     ____ _____ ___  ____  ____   ___   _| ____| |       / \   / ___|_   _|_ _|/ ___|/ ___| / _ \ | ||  _| | |      / _ \  \___ \ | |  | || |    \___ \| | | || || |___| |___  / ___ \  ___) || |  | || |___  ___) | |_| || |___|_____|_____|/_/   \_\|____/ |_| |___|\____||____/ \__\_\|_____|

Build StatusGo DocumentationCoverage StatusGo Report Card

This tool converts sql to elasticsearch dsl

Currently support:

  • sql and expression
  • sql or expression
  • equal(=) support
  • not equal(!=) support
  • gt(>) support
  • gte(>=) support
  • lt(<) support
  • lte(<=) support
  • sql in (eg. id in (1,2,3) ) expression
  • sql not in (eg. id not in (1,2,3) ) expression
  • paren bool support (eg. where (a=1 or b=1) and (c=1 or d=1))
  • sql like expression (currently use match phrase, perhaps will change to wildcard in the future)
  • sql order by support
  • sql limit support
  • sql not like expression
  • field missing check
  • support aggregation like count(*), count(field), min(field), max(field), avg(field)
  • support aggregation like stats(field), extended_stats(field), percentiles(field) which are not standard sql function
  • null check expression(is null/is not null)
  • join expression
  • having support

Usage

go get -u github.com/cch123/elasticsql

Demo :

package mainimport ("fmt""github.com/cch123/elasticsql")varsql=`select * from aaawhere 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`funcmain() {dsl,esType,_:=elasticsql.Convert(sql)fmt.Println(dsl)fmt.Println(esType)}

will produce :

{"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

If your sql contains some keywords, eg. order, timestamp, don't forget to escape these fields as follows:

select * from `order` where `timestamp` = 1 and `desc`.id > 0

Warning

To use this tool, you need to understand the term query and match phrase query of elasticsearch.

Setting a field to analyzed or not analyzed will get different results.

Details

For more details of convertion, please refer to thewiki

Other info

When writing this tool, I tried to avoid the deprecated dsl filters and aggregations, so it is compatible with most versions of the elasticsearch

If you have any advices or ideas, welcome to submit an issue or Pull Request!

License

MIT

About

convert sql to elasticsearch DSL in golang(go)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors3

  •  
  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp