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

 

posted @ 2020-04-13 15:44  MRLL  阅读(4012)  评论(0编辑  收藏  举报