ES-match_all、match和match_phrase的区别

本文介绍了Elasticsearch中的三种查询方法:match_all用于全匹配所有文档,match根据字段类型进行智能分词或不分词搜索,而match_phrase则要求查询短语按顺序完全匹配。
摘要由CSDN通过智能技术生成

1.match_all 查询:

match_all 查询是一种简单的查询,匹配索引中的所有文档,无论文档中的字段内容如何。返回索引中的全部文档。eg:

{
  "query": {
    "match_all": {}
  }
}

2.match 查询:

match 查询使用分析器来分词和处理查询字符串,match很智能,会根据查询字段类型,采用不同的查询方式,比如:

  • 查询的字段是日期或者数值类型的话,它会将你需要查询的内容转换为日期或者数值对待;

  • 如果查询的内容是一个不能被分词的内容,match查询不会对指定的查询关键字进行分词;

  • 如果查询的类型是一个可以分词的内容,match会根据指定内容分词,到分词库中去匹配。

  • 由此看出match很智能,根据检索内容,能分就分,分不了就不分。

3.match_phrase 查询:

match_phrase 查询也用于在指定字段中搜索,但它要求查询字符串中的短语按照顺序完整匹配字段内容。不像 match 查询,match_phrase 查询不会分词查询字符串,而是将整个查询字符串作为一个短语进行匹配。

示例:

  • 创建索引

PUT /lfq_demo_personal
{
    "mappings": {
        "properties": {
            "name": {
                "type": "keyword"
            },
            "age": {
                "type": "integer"
            },
            "birthday": {
                "type": "date"
            },
            "hobby": {
                "type": "text"
            },
            "ipaddress":{
              "type":"ip"
            }
        }
    }
}
  • 添加数据

POST /lfq_demo_personal/_doc/2
{
  "name":"理遇",
  "age":24,
  "birthday":"1999-05-28T11:13:16+08:00",
  "hobby":"理遇热爱Java,喜欢打篮球",
  "ipaddress":"2606:2800:220:1:248:1893:25c8:1946"
}
  • matchmatch_all查询

hobby 为text类型,所以可分词,输入: "理遇喜欢打篮球",match可以匹配到,match_prase匹配不到,结果如下:

  • match_prase

  • match

总结来说:

  • match_all 查询用于匹配所有文档。

  • match 查询用于搜索包含指定词汇的文档,根据类型分词或者不分词。

  • match_phrase 查询用于完整匹配指定短语,不分词,按照短语顺序匹配。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值