ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【ElasticSearch(五)进阶】两种_search检索方式,match_all检索,Query DSL基本使用

2021-08-24 14:04:28  阅读:196  来源: 互联网

标签:检索 sort search 进阶 account number balance bank desc


【ElasticSearch(五)进阶】两种_search检索方式,match_all检索,Query DSL基本使用


一、导入测试数据

ElasticSearch官方为我们准备了一部分测试数据供调试使用,我们可以Kinaba内进行数据导入处理

1.获取数据
https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip

2.执行批量添加

http://localhost:5601中选择Kibana,选择侧边栏的Dev Tools

POST /bank/account/_bulk
后面粘贴刚才下载的数据 

二、_search检索

ES支持两种基本方式检索:

一个是通过使用 REST request URI发送搜索参数(uri+检索参数)

另一个是通过使用 REST request body来发送它们(uri请求体)


【例子1】

GET /bank/_search?q=*&sort=account_number:asc

q=*表示全部搜索

sort=account_number:asc:根据account_number排序,是升序排序


返回结果:

结果并不会返回所有数据,只返回10条数据,类似于分页

took:检索花费时间

timed_out:检索是否超时

_shards:集群情况下,每个分片都为检索做了什么操作

hits:命中的记录

total.value:总记录的数量

max_score:最相关文档的得分

hits:所有命中的记录

{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1000,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "bank",
        "_type" : "account",
        "_id" : "0",
        "_score" : null,
        "_source" : {
          "account_number" : 0,
          "balance" : 16623,
          "firstname" : "Bradshaw",
          "lastname" : "Mckenzie",
          "age" : 29,
          "gender" : "F",
          "address" : "244 Columbus Place",
          "employer" : "Euron",
          "email" : "bradshawmckenzie@euron.com",
          "city" : "Hobucken",
          "state" : "CO"
        },
        "sort" : [
          0
        ]
      },
      {
        "_index" : "bank",
        "_type" : "account",
        "_id" : "1",
        "_score" : null,
        "_source" : {
          "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"
        },
        "sort" : [
          1
        ]
      },
     。。。
      {
        "_index" : "bank",
        "_type" : "account",
        "_id" : "9",
        "_score" : null,
        "_source" : {
          "account_number" : 9,
          "balance" : 24776,
          "firstname" : "Opal",
          "lastname" : "Meadows",
          "age" : 39,
          "gender" : "M",
          "address" : "963 Neptune Avenue",
          "employer" : "Cedward",
          "email" : "opalmeadows@cedward.com",
          "city" : "Olney",
          "state" : "OH"
        },
        "sort" : [
          9
        ]
      }
    ]
  }
}

【例子2】

先按照account_number进行降序,

query:查询条件

match_all:匹配所有

sort:排序条件

"account_number": "desc"先按照account_number进行降序排列

"balance": "desc":如果account_number相同,就按照balance进行降序

GET bank/_search
{
  "query": {
      "match_all": {}
  },
  "sort": [
    {
      "account_number": "desc"
    },
    {
      "balance": "desc"
    }
  ]
}

返回结果:

{
  "took" : 11,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1000,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "bank",
        "_type" : "account",
        "_id" : "999",
        "_score" : null,
        "_source" : {
          "account_number" : 999,
          "balance" : 6087,
          "firstname" : "Dorothy",
          "lastname" : "Barron",
          "age" : 22,
          "gender" : "F",
          "address" : "499 Laurel Avenue",
          "employer" : "Xurban",
          "email" : "dorothybarron@xurban.com",
          "city" : "Belvoir",
          "state" : "CA"
        },
        "sort" : [
          999,
          6087
        ]
      },
      {
        "_index" : "bank",
        "_type" : "account",
        "_id" : "998",
        "_score" : null,
        "_source" : {
          "account_number" : 998,
          "balance" : 16869,
          "firstname" : "Letha",
          "lastname" : "Baker",
          "age" : 40,
          "gender" : "F",
          "address" : "206 Llama Court",
          "employer" : "Dognosis",
          "email" : "lethabaker@dognosis.com",
          "city" : "Dunlo",
          "state" : "WV"
        },
        "sort" : [
          998,
          16869
        ]
      },
        。。。
    ]
  }
}

上面这种 查询条件 写成 请求体 的方式,就称为Query DSL。

三、Query DSL

1.基本语法格式

ElasticSearch提供了一个可以执行查询的Json风的DSL(domain-specific language 领域特定语言),这被称为 Query DSL。

该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学好它的方法是从一些基础的示例开始的。


【例子1】

一个查询语句 的典型结构:

{
    QUERY_NAME:{
         ARGUMENT:VALUE,
         ARGUMENT:VALUE...
    }    
}

例如查询索引bank的所有数据:

GET bank/_search
{
  "query": {
    "match_all": {}
  }
}

【例子2】

如果是针对某个字段查询,查询结构:

{
    QUERY_NAME:{
        FIELD NAME:{
            ARGUMENI:VALUE,
            ARGUMENT:VALUE...
        }
    }
}

按照 balance 降序查询:

GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "balance": {
        "order": "desc"
      }
    }
  ]
}

其中

"balance": {
    "order": "desc"
}

可以简写为:

"balance": "desc"

【例子3】

from:从查询到的第一条记录开始

size:共显示5条

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

返回的记录原本默认是10条,现在确实只有5条了


【例子4】

"_source": ["balance", "account_number"]:只显示字段balanceaccount_number。相当于筛选字段。

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

标签:检索,sort,search,进阶,account,number,balance,bank,desc
来源: https://www.cnblogs.com/musecho/p/15179980.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有