MCPcopy Index your code
hub / github.com/cch123/elasticsql

github.com/cch123/elasticsql @v1.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.1 ↗ · + Follow
26 symbols 68 edges 5 files 5 documented · 19% 1 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
 _____ _         _     ____ _____ ___  ____  ____   ___   _
| ____| |       / \   / ___|_   _|_ _|/ ___|/ ___| / _ \ | |
|  _| | |      / _ \  \___ \ | |  | || |    \___ \| | | || |
| |___| |___  / ___ \  ___) || |  | || |___  ___) | |_| || |___
|_____|_____|/_/   \_\|____/ |_| |___|\____||____/ \__\_\|_____|

Overview

Build Status Go Documentation Coverage Status Go Report Card

This tool converts sql to elasticsearch dsl

Currently support:

  • [x] sql and expression
  • [x] sql or expression
  • [x] equal(=) support
  • [x] not equal(!=) support
  • [x] gt(>) support
  • [x] gte(>=) support
  • [x] lt(<) support
  • [x] lte(<=) support
  • [x] sql in (eg. id in (1,2,3) ) expression
  • [x] sql not in (eg. id not in (1,2,3) ) expression
  • [x] paren bool support (eg. where (a=1 or b=1) and (c=1 or d=1))
  • [x] sql like expression (currently use match phrase, perhaps will change to wildcard in the future)
  • [x] sql order by support
  • [x] sql limit support
  • [x] sql not like expression
  • [x] field missing check
  • [x] support aggregation like count(*), count(field), min(field), max(field), avg(field)
  • [x] 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 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)
}

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 the wiki

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

Core symbols most depended-on inside this repo

handleSelectWhere
called by 5
select_handler.go
Convert
called by 4
main.go
ConvertPretty
called by 3
main.go
handleUpdate
called by 1
unsupported.go
handleDelete
called by 1
unsupported.go
handleInsert
called by 1
unsupported.go
handleFuncInSelectAgg
called by 1
select_agg_handler.go
handleGroupByColName
called by 1
select_agg_handler.go

Shape

Function 25
TypeAlias 1

Languages

Go100%

Modules by API surface

select_agg_handler.go10 symbols
select_handler.go8 symbols
unsupported.go3 symbols
select_test.go3 symbols
main.go2 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add elasticsql \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page