es的match和match_phrase的对比

最近使用了es的match和match_phrase,简单的做了一个对比

首先看看 ”我好帅“ 怎么进行分词?并将 我好帅 存入es

GET _analyze

{

  "analyzer": "ik_max_word",

  "text": "我好帅"

}

{

  "tokens": [

    {

      "token": "我好",

      "start_offset": 0,

      "end_offset": 2,

      "type": "CN_WORD",

      "position": 0

    },

    {

      "token": "我",

      "start_offset": 0,

      "end_offset": 1,

      "type": "CN_WORD",

      "position": 1

    },

    {

      "token": "好",

      "start_offset": 1,

      "end_offset": 2,

      "type": "CN_WORD",

      "position": 2

    },

    {

      "token": "帅",

      "start_offset": 2,

      "end_offset": 3,

      "type": "CN_WORD",

      "position": 3

    }

  ]

}



现在搜索 我好  ,会被分词为  我好 、我、好  三个分词,则都在分词库匹配上了。

match:只要匹配上任何一个分词,则返回

match_phrase:必须全部匹配,还要索引位置相邻

例如 现在搜 我帅,我 和 帅 都匹配上了,但是索引位置不相邻,所以不会返回数据

GET /kehujbxx_index_v1/kehujbxx_info/_search

{

  "query": {

    "bool": {

      "should": [

        {

          "match_phrase": {

            "xingming": {

              "query": "我帅",

            "analyzer":"ik_max_word"

            }

          }

        }

      ]

    }

  }

}


你可能感兴趣的:(es的match和match_phrase的对比)