ElasticSearch(es) match_phrase查询

es中match_phrase在查询时也会先分析查询字符串,然后对这些词项进行搜索,和match不同的是match_phrase查询只会保留包含全部查询字符串的文档。

参数

slop 查询词条能够相隔多远时仍然将文档视为匹配

使用了slop的短语匹配中,所有的单词都需要出现,但是单词的出现顺序可以不同。如果slop的值足够大,那么单词的顺序可以是任意的。

match对比

GET /bank/_search
{
  "query": {
    "match": {
      "title": "java学习"
     }
  }
}

title被分词成“java”“学习”,包含这这二个词中的一个或多个的文档就会被搜索出来。

GET /bank/_search
{
  "query": {
    "match_phrase": {
      "title": "java学习"
     }
  }
}

要完全匹配“java学习”的文档才会被搜索出来。这种比较严格,可以用slop来调节

GET /bank/_search
{
  "query": {
    "match_phrase": {
      "title": "java学习",
      "slop":3
     }
  }
}

slop值越大,搜索的顺序可以忽略不计。

ElasticSearch中一般情况下如果不希望被分词可以使用match_phrase进行搜索。