cch123/elasticsql

multi_match与match_phrase的区别

fengweiqiang opened this issue · 6 comments

https://elasticsearch.cn/question/5524
你好,如果想要使用multi_match,sql应该使用什么符号进行查询?

目前暂时还不支持

这个好像写 sql 的时候没有相同语义的符号。。要是用其它的也挺奇怪的,目前依赖的这个 sql parser 里定义的条件表达式可以参考 这里

我初步想法是扩展一下加个自定义函数?

这里的 switch 下面加一个 *sqlparser.FuncExpr 的 case,然后写类似这种的 SQL:

select * from aaa
where a=1 
and multi_match(b, 'yes we can')

需要看看你们的具体需求

嗯,谢谢,还有就是查询字段null/not null 没实现,是因为版本不兼容吗?

@fengweiqiang ,我们当时没这个需求,因为 es 里的数据都是从 mysql 来的,而 mysql 的规范都会要求字段不为 null

嗯嗯,非常感想你的讲解

@fengweiqiang ,在这个分支上已经支持了,你那边测测吧,要是没问题,我合 master:

https://github.com/cch123/elasticsql/tree/feature_multi_match

package main

import (
    "fmt"

    "github.com/cch123/elasticsql"
)

var sql = `
select * from aaa
where a=1 and x = '三个男人'
and multi_match(query='this is a test', fields=(title,title.origin))
`
//and multi_match(query='this is a test', fields=(title,title.origin), type=phrase)

func main() {
    dsl, esType, err := elasticsql.Convert(sql)
    fmt.Println(dsl)
    fmt.Println(esType)
    fmt.Println(err)
}

可以提供 query、fields 或者 query、fields 和 type

我自己简单试了试没啥问题,#20
之后有问题可以 reopen 或者另开 issue