Elasticsearch语法知多少之Match phrase query

目录

目标

ES版本信息

官方文档

短语查询的作用

实战

创建索引和文档

基本语法

易错点解析

设置slop解决分词间隔数量


目标

掌握es短语查询语法,通过设置slop参数控制短语搜索允许的分词间隔数量。


ES版本信息

7.17.5


官方文档

Match phrase queryhttps://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-match-query-phrase.html


短语查询的作用

对关键词进行分词,并要求分词在字段中都存在,且分词顺序相同。且默认分词间没有间隔。


实战

创建索引和文档

#索引1
PUT /match_phrase_db
{
  
}

PUT /match_phrase_db/_doc/1
{
  "content":"I love you three thousand times a day"
}
PUT /match_phrase_db/_doc/2
{
  "content":"我去过安徽的黄山"
}
PUT /match_phrase_db/_doc/3
{
  "content":"I don't love you very much"
}

#索引2
PUT /match_phrase_db2
{
  "settings": {
    "index": {
      "analysis.analyzer.default.type": "ik_max_word"
    }
  }
}

PUT /match_phrase_db2/_doc/1
{
  "content":"云南省云南白药厂"
}
PUT /match_phrase_db2/_doc/2
{
  "content":"安徽黄山风景区"
}

基本语法

需求一:搜索条件为"I love you",对应的搜索字段是content,要求字段中必须存在"I love you"短语,且各个分词之间没有间断。

GET /match_phrase_db/_search
{
  "query": {
    "match_phrase": {
      "content": "I love you"
    }
  }
}

需求二:短语搜索条件为"安徽黄山"。

GET /match_phrase_db/_search
{
  "query": {
    "match_phrase": {
      "content": "安徽黄山"
    }
  }
}

总结:需求一只查出了id=1的文档,id=3的文档没有查出来是因为中间有其他分词;需求一没有查出结果,也是因为中间间隔了其他分词。


易错点解析

易错点:顺序相同不是指字段值的内容完全包含关键词,而是指分词顺序相同

需求一:短语搜索"黄山风景"。

GET /match_phrase_db2/_search
{
  "query": {
    "match_phrase": {
      "content": "黄山风景"
    }
  }
}
POST _analyze
{
  "text": "安徽黄山风景区",
  "analyzer": "ik_max_word"
}

分析:结果集为空,对"安徽黄山风景区"和"黄山风景"分词,发现分词"山风"和"风景"之间还间隔了"风景区"这个分词,所以不符合条件。


设置slop解决分词间隔数量

需求:短语搜索"安徽风景区",要求可以查到第一条文档。

分析:对第一条文档中的字段分词,"安徽黄山风景区"分词后发现安徽距离风景区相差两个字段,所以设置slop=2可以解决默认相隔字段为0的问题。

GET /match_phrase_db2/_search
{
  "query": {
    "match_phrase": {
      "content": {
        "query": "安徽风景区",
        "slop": 2
      }
    }
  }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值