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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM