`

ElasticSearch 索引查询使用指南——详细版

    博客分类:
  • ELK
 
阅读更多

                                           ElasticSearch 索引查询使用指南——详细版

此文来自:https://www.cnblogs.com/pilihaotian/p/5830754.html

  1. 我们通常用用_cat API检测集群是否健康。 确保9200端口号可用:

  curl 'localhost:9200/_cat/health?v'

 

  绿色表示一切正常, 黄色表示所有的数据可用但是部分副本还没有分配,红色表示部分数据因为某些原因不可用.

 

  2.通过如下语句,我们可以获取集群的节点列表:

  curl 'localhost:9200/_cat/nodes?v'

 

  3。通过如下语句,列出所有索引:

  curl 'localhost:9200/_cat/indices?v'

  返回结果:

     

 

 

  4.创建索引

  现在我们创建一个名为“customer”的索引,然后再查看所有的索引:

 curl -XPUT 'localhost:9200/customer?pretty'
 curl 'localhost:9200/_cat/indices?v'

 

  结果如下:

   

 

   

 

  上图中红框所表示的是:我们有一个叫customer的索引,它有五个私有的分片以及一个副本,在它里面有0个文档。

 

  5.插入和获取

  现在我么插入一些数据到集群索引。我们必须给ES指定所以的类型。如下语句:"external" type, ID:1:

  主体为JSON格式的语句: { "name": "John Doe" }

  curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
  {
           "name": "John Doe"
  }'

 

  返回结果为:create:true 表示插入成功。

   

 

  获取GET,语句如下:

   curl -XGET 'localhost:9200/customer/external/1?pretty'

  其中含义为:获取customer索引下类型为external,id为1的数据,pretty参数表示返回结果格式美观。

   

 

  6.删除索引 DELETE

  curl -XDELETE 'localhost:9200/customer?pretty'
  curl 'localhost:9200/_cat/indices?v'

   

  表示索引删除成功。

 

  7.通过以上命令语句的学习,我们发现索引的增删改查有一个类似的格式,总结如下:

  curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID>

  <REST Verb>:REST风格的语法谓词

  <Node>:节点ip

  <port>:节点端口号,默认9200

  <Index>:索引名

  <Type>:索引类型

  <ID>:操作对象的ID号

  8 修改数据

  curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
  {
    "name": "John Doe"
  }'
  curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
  {
    "name": "Jane Doe"
  }'

  上述命令语句是:先新增id为1,name为John Doe的数据,然后将id为1的name修改为Jane Doe。

  9.更新数据

  9.1 这个例子展示如何将id为1文档的name字段更新为Jane Doe:

  curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
  {
    "doc": { "name": "Jane Doe" }
  }'

 

  9.2 这个例子展示如何将id为1数据的name字段更新为Jane Doe同时增加字段age为20:

  curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
  {
    "doc": { "name": "Jane Doe", "age": 20 }
  }'

  9.3  也可以通过一些简单的scripts来执行更新。一下语句通过使用script将年龄增加5:

  curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
  {
    "script" : "ctx._source.age += 5"
  }'

  10 删除数据

  删除数据那是相当的直接. 下面的语句将执行删除Customer中ID为2的数据:

  curl -XDELETE 'localhost:9200/customer/external/2?pretty'

  11 批处理

  举例:

  下面语句将在一个批量操作中执行创建索引:

  curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
  {"index":{"_id":"1"}}
  {"name": "John Doe" }
  {"index":{"_id":"2"}}
  {"name": "Jane Doe" }
  '

  下面语句批处理执行更新id为1的数据然后执行删除id为2的数据

  curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
  {"update":{"_id":"1"}}
  {"doc": { "name": "John Doe becomes Jane Doe" } }
  {"delete":{"_id":"2"}}
  '

 

  12.导入数据集

  你可以点击这里下载示例数据集:accounts.json

  其中每个数据都是如下格式:

 

  {
         "index":{"_id":"1"}
  }
  {
      "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"
  }

 

  导入示例数据集:

 

  curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary "@accounts.json"
  curl 'localhost:9200/_cat/indices?v'

   

 

  上图红框表示我们已经成功批量导入1000条数据索引到bank索引中。

  13.查询

  Sample:

 

  curl 'localhost:9200/bank/_search?q=*&pretty'
  {
      "took" : 63,
      "timed_out" : false,
      "_shards" : {
      "total" : 5,
      "successful" : 5,
      "failed" : 0
    },
  "hits" : {
    "total" : 1000,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "bank",
      "_type" : "account",
      "_id" : "1",
      "_score" : 1.0, "_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"}
    }, {
      "_index" : "bank",
      "_type" : "account",
      "_id" : "6",
      "_score" : 1.0, "_source" : {"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" : "bank",
      "_type" : "account",

 

 

  上面示例返回所有bank中的索引数据。其中 q=*  表示匹配索引中所有的数据。

 

  等价于:

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
  {
    "query": { "match_all": {} }
  }'

 

 

  14 查询语言

 

  匹配所有数据,但只返回1个:

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '

  {

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

    "size": 1

  }'

  注意:如果siez不指定,则默认返回10条数据。

 

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '

  {

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

    "from": 10,

    "size": 10

  }'

 

  返回从11到20的数据。(索引下标从0开始)

 

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '

  {

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

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

  }'

 

  上述示例匹配所有的索引中的数据,按照balance字段降序排序,并且返回前10条(如果不指定size,默认最多返回10条)。

 

  15.执行搜索

 

  下面例子展示如何返回两个字段(account_number balance)

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '

  {

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

    "_source": ["account_number", "balance"]

  }'

   

 

 

  返回account_number 为20 的数据:

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
  {
    "query": { "match": { "account_number": 20 } }
  }'

 

  返回address中包含mill的所有数据::

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
  {
    "query": { "match": { "address": "mill" } }
  }'

  返回地址中包含mill或者lane的所有数据:

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
  {
    "query": { "match": { "address": "mill lane" } }
  }'

 

 

  和上面匹配单个词语不同,下面这个例子是多匹配(match_phrase短语匹配),返回地址中包含短语 “mill lane”的所有数据:

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
  {
    "query": { "match_phrase": { "address": "mill lane" } }
  }'

 

  以下是布尔查询,布尔查询允许我们将多个简单的查询组合成一个更复杂的布尔逻辑查询。

  这个例子将两个查询组合,返回地址中含有mill和lane的所有记录数据:

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
  {
    "query": {
      "bool": {
        "must": [
          { "match": { "address": "mill" } },
          { "match": { "address": "lane" } }
        ]
      }
    }
  }'

  上述例子中,must表示所有查询必须都为真才被认为匹配。

 

  相反, 这个例子组合两个查询,返回地址中含有mill或者lane的所有记录数据:

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
  {
    "query": {
      "bool": {
        "should": [
          { "match": { "address": "mill" } },
          { "match": { "address": "lane" } }
        ]
      }
    }
  }'

 

  上述例子中,bool表示查询列表中只要有任何一个为真则认为匹配。

 

  下面例子组合两个查询,返回地址中既没有mill也没有lane的所有数据:

 

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
  {
    "query": {
      "bool": {
        "must_not": [
          { "match": { "address": "mill" } },
          { "match": { "address": "lane" } }
        ]
      }
    }
  }'

  上述例子中,must_not表示查询列表中没有为真的(也就是全为假)时则认为匹配。

 

  我们可以组合must、should、must_not来实现更加复杂的多级逻辑查询。

 

  下面这个例子返回年龄大于40岁、不居住在ID的所有数据:

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
  {
    "query": {
      "bool": {
        "must": [
          { "match": { "age": "40" } }
        ],
        "must_not": [
          { "match": { "state": "ID" } }
        ]
      }
    }
  }'

 

 

  16.过滤filter(查询条件设置)

 

  下面这个例子使用了布尔查询返回balance在20000到30000之间的所有数据。

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '

  {

      "query": {

        "bool": {

          "must": { "match_all": {} },

          "filter": {

            "range": {

            "balance": {

              "gte": 20000,

              "lte": 30000

            }

          }

        }

      }

    }

  }'

 

 

  17 聚合 Aggregations

  下面这个例子: 将所有的数据按照state分组(group),然后按照分组记录数从大到小排序,返回前十条(默认):

 

  curl -XPOST 'localhost:9200/bank/_search?pretty' -d '

  {

    "size": 0,

    "aggs": {

      "group_by_state": {

        "terms": {

           "field": "state"

        }

      }

    }

  }'

 

  注意:我们设置size=0,不显示查询hits,因为我们只想看返回的聚合结果。

   

分享到:
评论

相关推荐

    Elasticsearch权威指南-中文.pdf

    **Elasticsearch权威指南——中文版** Elasticsearch(简称ES)是一款开源的全文搜索引擎,基于Lucene构建,设计目标是实现分布式、可扩展、实时的搜索和分析引擎。它不仅能够提供强大的全文检索功能,还能进行数据...

    es权威指南中文版

    《Elasticsearch 权威指南》中文版是针对 Elastic Stack 中的核心组件——Elasticsearch 的一本详尽参考资料,尤其适合中文阅读者。Elasticsearch 是一个开源的全文搜索引擎,广泛应用于数据分析、日志分析、实时...

    elasticsearch-head-chrome-master.zip

    "elasticsearch-head-chrome-master.zip" 是一个与Elasticsearch相关的压缩包,其中包含了用于在Chrome浏览器中查看和管理Elasticsearch集群的插件——"elasticsearch-head"。这个插件允许用户通过直观的Web界面来...

    es file river同步文档

    - **描述**:“es file 同步操作文档”,即关于如何使用FSCrawler进行文件系统与Elasticsearch之间同步的具体操作指南。 - **标签**:“es file 文档” 表明了本文档关注的重点是Elasticsearch中的文件处理技术。 ...

    elasticsearch.zip

    接下来是"elasticsearch-analysis-ik-6.2.4.zip",这是一个针对Elasticsearch的中文分词器插件——IK分词器的6.2.4版本。IK分词器是Elasticsearch进行中文文本分析的关键工具,它能将中文句子拆分成一系列的关键词,...

    ES资料ES资料ES资料

    "ES技术资料"可能包含Elasticsearch的安装教程、配置示例、最佳实践、性能优化指南、API参考文档、实战案例分析等内容。通过这些资料,学习者可以深入了解Elasticsearch的使用方法和高级特性,提升在实际项目中的...

    开源项目-cch123-elasticsql.zip

    开源项目“cch123-elasticsql”是一个旨在提供SQL到Elasticsearch DSL转换的工具,使得数据库管理员和开发人员能够更方便地利用Elasticsearch的强大搜索功能,而无需深入学习Elasticsearch的JSON查询语法——DSL...

    sense09.rar

    在本文中,我们将围绕"Sense09.rar"这个压缩包,详细解析Sense的使用方法及其在Elasticsearch中的作用。 首先,"Sense_0_9_0_.rar"是Sense的0.9.0版本的安装文件。Sense最初由Kibana团队开发,后来被Elastic公司...

    accountjson.txt

    但从7.x版本开始,Elasticsearch取消了类型的概念,每个索引只有一种类型——默认的_doc类型。 4. **分片(Shard)**:为了提高性能和可用性,Elasticsearch允许将一个索引拆分成多个分片,这些分片可以在集群的不同...

    Java Script 经典教程(七)——JavaScript用户指南

    - **数组**:使用方括号`[]`创建,支持索引访问和方法调用,如`push`、`pop`、`slice`等。 - **原型链**:理解原型和原型链的概念,如何通过`__proto__`或`prototype`进行继承。 4. **事件与DOM操作** - **事件...

    Lucene in action中文版

    7. **高级特性**:除了基础功能,书中还会涉及一些高级特性,如多字段搜索、评分函数、近实时搜索、分布式搜索(通过Solr或Elasticsearch)等,这些都是在实际应用中非常重要的知识点。 8. **实战案例**:为了帮助...

    Lucene in Action 2

    6. **扩展与集成**:书中还介绍了如何与其他系统集成,如Solr和Elasticsearch,这两个都是基于Lucene的企业级搜索平台,提供更高级的功能,如分布式搜索、集群管理和丰富的API。 7. **实战案例**:通过多个实际示例...

    解密搜索引擎技术实战++Lucene&amp;Java;精华版_.pdf

    随着大数据时代的到来,单台服务器往往无法满足大规模数据的搜索需求,因此,理解如何使用Solr或Elasticsearch(基于Lucene的分布式搜索引擎)进行集群部署和管理,是提升搜索效率的关键。 除此之外,实战部分会...

    Manning.Lucene.in.Action.2nd.Edition.Jun.2010.MEAP.rar

    Solr和Elasticsearch是基于Lucene的分布式搜索平台,它们提供了集群和分布式搜索能力,支持高可用性和可伸缩性。 9. **文本分析与自然语言处理**:Lucene的分析器可以定制,以适应不同语言的文本特性。自然语言处理...

    java 全端开源 电商系统 springboot uniapp 小程序 前后端分离 高可用(csdn)————程序..pdf

    8. **Elasticsearch**:搜索引擎,用于商品搜索和数据索引,提供高效的全文检索功能。 9. **Spring Security**:安全框架,确保系统的安全性,提供身份验证和授权等功能。 10. **Docker和Kubernetes**:系统支持...

    Lucence资料大全

    4. 分布式搜索:通过Solr或Elasticsearch等基于Lucene的高级框架,实现大规模数据的分布式搜索。 5. 高级查询:包括范围查询、地理位置查询、自定义评分函数等,满足复杂查询需求。 6. 集成优化:与Spring、...

    Lucene实战

    Lucene通过Solr或Elasticsearch等扩展工具支持分布式搜索,实现了多节点索引的管理和查询。 10. **性能优化** 为了提高性能,Lucene提供了缓存机制、位向量(BitSet)以及分块索引等技术。此外,合理的硬件配置和...

    实战ELK-分布式大数据搜索与日志挖掘及可视化解决方案

    读者将学习如何利用Logstash处理不同类型的日志数据,如何设置Elasticsearch集群以保证数据的高可用性和可扩展性,以及如何使用Kibana创建美观且实用的数据仪表板。 通过学习《实战ELK——分布式大数据搜索与日志...

    OpenGL ES.2.0 Programming Guide

    ### OpenGL ES 2.0 编程指南 #### 引言 OpenGL ES 2.0 是一种用于在手持设备和嵌入式系统上渲染复杂 3D 图形的软件接口。随着移动计算能力的增强,高级图形处理已成为移动应用的重要组成部分。OpenGL ES 2.0 为...

Global site tag (gtag.js) - Google Analytics