es实现mysql的like查询
es版本6.8
因为阿里云的dts同步最高支持es版本就是6.8
构建索引
PUT /z_test/ { "mappings": { "doc": { "properties": { "name": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } } }
在action.auto_create_index为true的情况下,无需此步操作
插入测试数据
POST /z_test/doc { "name":"测试" }
POST /z_test/doc { "name":"测试123" }
POST /z_test/doc { "name":"测间隔间隔试" }
如果在action.auto_create_index为true的情况下,此步操作会自动创建索引
查询
GET /z_test/doc/_search { "explain": false, "query": { "match_phrase": { "name": "测试" } } }
该查询会返回 测试和测试123的数据
如果想只返回测试的话,应使用以下查询
GET /z_test/doc/_search { "explain": false, "query": { "match_phrase": { "name.keyword": "测试" } } }
在es5.0以上的版本string类型被text类型代替,默认情况下载text下还会有个字段为keyword,ignore_above为截断字符长度,默认为256,该字段不走分词,所以通过该字段查询可以得到精确匹配
扩展
若想得到 测间隔间隔试 的数据可使用以下查询
GET /z_test/doc/_search { "explain": false, "query": { "match_phrase": { "name": { "query": "测试", "slop": 4 } } } }
slop字段的意思为间隔几个词可以被搜索到
具体底层怎么存的看这篇文章
https://blog.csdn.net/hsj1213522415/article/details/96743988