ElasticSearch 1

106 阅读2分钟
// bulk 批量导入api
POST /customer/external/_bulk
{"index":{"_id":"1"}}
{"name":"John Nash" }
{"index":{"_id":"2"}}
{"name":"Jane Nash" }


POST /_bulk
{"delete":{"_index":"website","_type":"blog","_id":"123"}}
{"create":{"_index":"website","_type":"blog","_id":"123"}}
{"title":"My first blog post"}
{"index":{"_index":"website","_type":"blog"}}
{"title":"My second blog post"}
{"update":{"_index":"website","_type":"blog","_id":"123"}}
{"doc":{"title":"My updated blog post"}}


POST bank/account/_bulk
{"index":{"_id":"1"}}
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
{"index":{"_id":"6"}}
{"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}
{"index":{"_id":"13"}}
{"account_number":13,"balance":32838,"firstname":"Nanette","lastname":"Bates","age":28,"gender":"F","address":"789 Madison Street","employer":"Quility","email":"nanettebates@quility.com","city":"Nogal","state":"VA"}
{"index":{"_id":"18"}}
{"account_number":18,"balance":4180,"firstname":"Dale","lastname":"Adams","age":33,"gender":"M","address":"467 Hutchinson Court","employer":"Boink","email":"daleadams@boink.com","city":"Orick","state":"MD"}
{"index":{"_id":"20"}}
{"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":{"_id":"25"}}
{"account_number":25,"balance":40540,"firstname":"Virginia","lastname":"Ayala","age":39,"gender":"F","address":"171 Putnam Avenue","employer":"Filodyne","email":"virginiaayala@filodyne.com","city":"Nicholson","state":"PA"}


1、SearchAPlES 支持两种基本方式检索:一个是通过使用 REST request URI 发送搜索参数(uri+检索参数)另一个是通过使用 REST requestbody 来发送它们(uri+请求体)
GET bank/_search?q=*&sort=account_number:asc

GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
     {
       "balance": "desc"
     }
   ],
   "from": 0,
   "size": 5,
   "_source": ["balance","firstname"]
}

- query 定义如何查询;- match_all 查询类型【代表查询所有的所有】, es 中可以在 query 中组合非常多的查询类型完成复杂查询- 除了 query 参数之外,我们也可以传递其它的参数以改变查询结果。如 sort,size;- from+size 限定,完成分页功能;- sort 排序,多字段排序,会在前序字段相等时后续字段内部排序,否则以前序为准

2)、返回部分字段

GET /bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "balance": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 5,
  "_source": ["balance","firstname"]
}

3)、match【匹配查询】

基本类型(非字符串),精确匹配match 返回 account_number=20 的数据:

GET /bank/_search
{
  "query": {
    "match": {
      "account_number": 20
    }
  }
}
  • 字符串,全文检索

最终查询出 address 中包含 Kings 单词的所有记录,当搜索字符串类型的时候,会进行全文检索,并且每条记录有相关性得分。

GET /bank/_search
{
  "query": {
    "match": {
      "address": "Kings"
    }
  }
}
  • 字符串,多个单词(分词+全文检索)

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

GET /bank/_search
{
  "query": {
    "match": {
      "address": "Mill Lane"
    }
  }
}

最终查询出 address 中包含 Mill 或者 Lane 或者 Mill Lane 的所有记录,并给出相关性得分

4)、match_phrase 【短语匹配】

将需要匹配的值当成一个整体单词(不分词)进行检索

举个栗子:查出 address 中包含 mill road 的所有记录,并给出相关性得分

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

5)、multi_match 【多字段匹配】

举例:state 或 address 包含 mill

GET /bank/_search
{
  "query": {
    "multi_match": {
      "query": "mill",
      "fields": ["address","state"]
    }
  }
}

多字段查询的时候也会进行分词查询,得分最高的在前面:

GET /bank/_search
{
  "query": {
    "multi_match": {
      "query": "mill movico",
      "fields": ["address","city"]
    }
  }
}