zoukankan      html  css  js  c++  java
  • 【ElasticSearch(六)进阶】match匹配,match_phrase 短语匹配

    【ElasticSearch(六)进阶】match匹配,match_phrase 短语匹配


    一、match进行 基本类型(非字符串)精确匹配

    查询 account_number 是 20 的所有结果:

    GET /bank/_search
    {
      "query": {
        "match": {
          "account_number": 20
        }
      }
    }
    

    返回内容:

    此时max_score为1.0,该条记录的_score就是1.0,这是精确匹配。

    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "bank",
            "_type" : "account",
            "_id" : "20",
            "_score" : 1.0,
            "_source" : {
              "account_number" : 20,
              "balance" : 16418,
              "firstname" : "Elinor",
              "lastname" : "Ratliff",
              "age" : 36,
              "gender" : "M",
              "address" : "282 Kings Place",
              "employer" : "Scentric",
              "email" : "elinorratliff@scentric.com",
              "city" : "Ribera",
              "state" : "WA"
            }
          }
        ]
      }
    }
    

    二、match进行 字符串模糊匹配查询(全文检索)

    查询所有 address 中包含 Kings 的数据:

    GET bank/_search
    {
      "query": {
        "match": {
          "address": "Kings"
        }
      }
    }
    

    返回结果:

    可以看到"address" : "282 Kings Place""address" : "305 Kings Hwy"两条记录都返回了

    {
      "took" : 6,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 2,
          "relation" : "eq"
        },
        "max_score" : 5.990829,
        "hits" : [
          {
            "_index" : "bank",
            "_type" : "account",
            "_id" : "20",
            "_score" : 5.990829,
            "_source" : {
              "account_number" : 20,
              "balance" : 16418,
              "firstname" : "Elinor",
              "lastname" : "Ratliff",
              "age" : 36,
              "gender" : "M",
              "address" : "282 Kings Place",
              "employer" : "Scentric",
              "email" : "elinorratliff@scentric.com",
              "city" : "Ribera",
              "state" : "WA"
            }
          },
          {
            "_index" : "bank",
            "_type" : "account",
            "_id" : "722",
            "_score" : 5.990829,
            "_source" : {
              "account_number" : 722,
              "balance" : 27256,
              "firstname" : "Roberts",
              "lastname" : "Beasley",
              "age" : 34,
              "gender" : "F",
              "address" : "305 Kings Hwy",
              "employer" : "Quintity",
              "email" : "robertsbeasley@quintity.com",
              "city" : "Hayden",
              "state" : "PA"
            }
          }
        ]
      }
    }
    

    *全文检索就是利用了 倒排索引表,会按照评分进行排序。


    三、match_phrase 短语匹配

    默认的match搜索会对搜索内容进行分词,比如:mill lane 会分成 mill 和 lane 之后搜索的结果可能包含仅有其中一项的结果,但是此类结果分数较低。

    如果不希望被分词而是直接查询短语,可以使用 match_phrase 进行搜索


    例子:

    查询 地址包含 mill lane 的数据:

    GET /bank/_search
    {
      "query": {
        "match_phrase": {
          "address": "mill lane"
        }
      }
    }
    

    返回结果:

    {
      "took" : 18,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 9.507477,
        "hits" : [
          {
            "_index" : "bank",
            "_type" : "account",
            "_id" : "136",
            "_score" : 9.507477,
            "_source" : {
              "account_number" : 136,
              "balance" : 45801,
              "firstname" : "Winnie",
              "lastname" : "Holland",
              "age" : 38,
              "gender" : "M",
              "address" : "198 Mill Lane",
              "employer" : "Neteria",
              "email" : "winnieholland@neteria.com",
              "city" : "Urie",
              "state" : "IL"
            }
          }
        ]
      }
    }
    
  • 相关阅读:
    校园商铺-8商品模块-12接触商品与某商品类别的关联的实现
    centos 7访问windows共享文件夹
    怎样在CentOS 7.0上安装和配置VNC服务器
    【总结】教你怎么将centos7打造成桌面系统
    Centos 7安装gvim
    CentOS 7 安装virtualBox
    Centos 7中 vim 中文乱码
    CentOS 7 gedit编辑器中文乱码解决方法
    centos7支持ntfs
    delta
  • 原文地址:https://www.cnblogs.com/musecho/p/15179984.html
Copyright © 2011-2022 走看看