天天看点

ElasticSearch学习笔记 | Match和Match_phrase匹配搜索

本文测试数据为官方提供的测试数据,导入方法在学习笔记本章节第一篇中

一、基本类型(非​​字符串​​​),精确匹配

查询 account_number 是 20 的所有结果:

GET bank/_search

{

  "query": {

    "match": {

      "account_number": 20

    }

  }

}

返回内容:

{

  "took" : 6,

  "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" : "[email protected]",

          "city" : "Ribera",

          "state" : "WA"

        }

      }

    ]

  }

}

二、字符串模糊匹配查询

比如我们希望查询所有 address 中包含 Kings 的数据:

GET bank/_search

{

  "query": {

    "match": {

      "address": "Kings"

    }

  }

}

返回结果:

可以看到 “282 Kings Place” 和 “305 Kings Hwy” 两条记录都返回了

全文检索会按照评分进行排序,会对检索条件进行分词匹配。

{

  "took" : 157,

  "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" : "[email protected]",

          "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" : "[email protected]",

          "city" : "Hayden",

          "state" : "PA"

        }

      }

    ]

  }

}

三、Match_phrase 短语匹配

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

如果不希望被分词可以使用 match_phrase 进行搜索

例子:

查询 地址 包含 mill lane 的结果:

继续阅读