Elasticsearch:RESTful风格API

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch:RESTful风格API

RESTful接口URL的格式:

http://IP:9200/<index>/<type>/[<id>]

image.gif

    • 其中index、type是必须提供的。
    • id是可选的,不提供es会自动生成。
    • index、type将信息进行分层,利于管理。
    • index可以理解为数据库;type理解为数据表;id相当于数据库表中记录的主键,是唯一的。

    RESTful接口URL的增删改查:

    添加数据

      • #向store索引中添加一些书籍
      curl -XPUT 'http://IP:9200/store/books/1' -d '{
        "title": "Elasticsearch: The Definitive Guide",
        "name" : {
          "first" : "Zachary",
          "last" : "Tong"
        },
        "publish_date":"2015-02-06",
        "price":"49.99"
      }'

      image.gif

        • #再添加一个书的信息
        curl -XPUT 'http://IP:9200/store/books/2' -d '{
          "title": "Elasticsearch Blueprints",
          "name" : {
            "first" : "Vineeth",
            "last" : "Mohan"
          },
          "publish_date":"2015-06-06",
          "price":"35.99"
        }'

        image.gif

        查询

          • #在linux中通过curl的方式查询
          curl -XGET 'http://IP:9200/store/books/1'

          image.gif

            • #通过浏览器查询
            http://IP:9200/store/books/1

            image.gif

              • # 通过_source获取指定的字段
              curl -XGET 'http://IP:9200/store/books/1?_source=title'
              curl -XGET 'http://IP:9200/store/books/1?_source=title,price'
              curl -XGET 'http://IP:9200/store/books/1?_source'

              image.gif

              更新

                • #可以通过覆盖的方式更新
                curl -XPUT 'http://IP:9200/store/books/1' -d '{
                  "title": "Elasticsearch: The Definitive Guide",
                  "name" : {
                    "first" : "Zachary",
                    "last" : "Tong"
                  },
                  "publish_date":"2016-02-06",
                  "price":"99.99"
                }'

                image.gif

                  • # 或者通过 _update  API的方式单独更新你想要更新的
                  curl -XPOST 'http://IP:9200/store/books/1/_update' -d '{
                    "doc": {
                       "price" : 88.88
                    }
                  }'
                  curl -XGET 'http://IP:9200/store/books/1'

                  image.gif

                  删除

                    • #删除一个文档
                    curl -XDELETE 'http://IP:9200/store/books/1'

                    image.gif

                    高级查询

                    最简单filter查询

                      • 类似 :SELECT * FROM books WHERE price = 35.99
                      # 首先添加一条数据
                      curl -XPUT 'http://IP:9200/store/books/4' -d '{
                        "title": "Elasticsearch: The Definitive Guide",
                        "author": "Guide",
                        "publish_date":"2016-02-06",
                        "price":"35.99"
                      }'

                      image.gif

                        • # filtered 查询价格是35.99的
                        • # 返回的的分是1.0
                        curl -XGET 'http://IP:9200/store/books/_search' -d '{
                          "query": {
                            "bool": {
                              "must": {
                                "match_all": {}
                              },
                              "filter": {
                                "term": {
                                  "price": 35.99
                                }
                              }
                            }
                          }
                        }'

                        image.gif

                          • # 返回的的分是1.0
                          curl -XGET 'http://IP:9200/store/books/_search' -d '{
                            "query": {
                              "constant_score": {
                                "filter": {
                                  "term": {
                                    "price": 35.99
                                  }
                                }
                              }
                            }
                          }'

                          image.gif

                            • # 返回的的分是0.0

                            指定多个值查询

                            curl -XGET 'http://IP:9200/store/books/_search' -d '{
                                "query" : {
                                    "bool" : {
                                        "filter" : {
                                            "terms" : {
                                                "price" : [35.99, 99.99]
                                              }
                                          }
                                    }
                                }
                            }'

                            image.gif

                            curl -XGET 'http://IP:9200/store/books/_search' -d '{
                                "query" : {
                                    "bool" : {
                                        "must": {
                                            "match_all": {}
                                        },
                                        "filter" : {
                                            "terms" : {
                                                "price" : [35.99, 99.99]
                                              }
                                          }
                                    }
                                }
                            }'

                            image.gif

                              • # SELECT * FROM books WHERE publish_date = "2015-02-06"
                              curl -XGET 'http://IP:9200/store/books/_search' -d '{
                                "query" : {
                                  "bool" : {
                                      "filter" : {
                                         "term" : {
                                            "publish_date" : "2015-02-06"
                                          }
                                        }
                                    }
                                }
                              }'

                              image.gif

                              嵌套查询

                              # bool过滤查询,可以做组合过滤查询

                                • 类似:SELECT * FROM books WHERE (price = 35.99 OR price = 99.99) AND publish_date != "2016-02-06"

                                # 类似的,Elasticsearch也有 and, or, not这样的组合条件的查询方式

                                # 格式如下:

                                {
                                    "bool" : {
                                    "must" :     [],
                                    "should" :   [],
                                    "must_not" : [],
                                    }
                                  }

                                image.gif

                                  • # must: 条件必须满足,相当于 and
                                  • # should: 条件可以满足也可以不满足,相当于 or
                                  • # must_not: 条件不需要满足,相当于 not
                                  curl -XGET 'http://IP:9200/store/books/_search' -d '{
                                    "query" : {
                                      "bool" : {
                                        "should" : [
                                          { "term" : {"price" : 35.99}},
                                          { "term" : {"price" : 99.99}}
                                        ],
                                        "must_not" : {
                                          "term" : {"publish_date" : "2016-02-06"}
                                        }
                                      }
                                    }
                                  }'

                                  image.gif

                                  range范围过滤

                                    • 类似: SELECT * FROM books WHERE price >= 10 AND price < 99
                                      • # gt :  > 大于
                                      • # lt :  < 小于
                                      • # gte :  >= 大于等于
                                      • # lte :  <= 小于等于
                                        curl -XGET 'http://IP:9200/store/books/_search' -d '{
                                            "query": {
                                                "range" : {
                                                    "price" : {
                                                        "gte" : 10,
                                                        "lt" : 99
                                                    }
                                                }
                                            }
                                        }

                                        image.gif

                                          • #name和author都必须包含Guide,并且价钱等于33.99或者188.99
                                          curl -XGET 'http://IP:9200/store/books/_search' -d '{
                                              "query": {
                                                  "bool": {
                                                      "must": {
                                                          "multi_match": {
                                                              "operator": "and",
                                                              "fields": [
                                                                  "name",
                                                                  "author"
                                                              ],
                                                              "query": "Guide"
                                                          }
                                                      },
                                                      "filter": {
                                                          "terms": {
                                                              "price": [
                                                                  35.99,
                                                                  188.99
                                                              ]
                                                          }
                                                      }
                                                  }
                                              }
                                          }'

                                          image.gif

                                          参考来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html

                                          相关实践学习
                                          使用阿里云Elasticsearch体验信息检索加速
                                          通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
                                          ElasticSearch 入门精讲
                                          ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
                                          目录
                                          相关文章
                                          |
                                          4月前
                                          |
                                          API 网络架构 UED
                                          构建RESTful API的最佳实践
                                          【8月更文挑战第54天】在数字化时代,RESTful API已成为连接不同软件系统、提供数据服务的关键桥梁。本文将深入探讨如何构建高效、可维护的RESTful API,涵盖设计原则、安全策略和性能优化等关键方面。通过具体代码示例,我们将一步步展示如何实现一个简洁、直观且功能强大的API。无论你是新手还是有经验的开发者,这篇文章都将为你提供宝贵的指导和启示。
                                          86 33
                                          |
                                          5月前
                                          |
                                          NoSQL JavaScript API
                                          深入浅出:从零构建RESTful API
                                          本文将带你踏上一场后端开发的奇幻旅程,我们将一起揭开RESTful API的神秘面纱。无论你是初学者还是有一定经验的开发者,这篇文章都会为你提供宝贵的知识。我们将从基础概念出发,逐步深入到实战操作,最终实现一个功能完备的RESTful API。在这个过程中,你将学会如何设计API、处理数据和响应请求。准备好了吗?让我们开始吧!
                                          |
                                          8月前
                                          |
                                          缓存 测试技术 API
                                          RESTful API的最佳实践
                                          【5月更文挑战第11天】在Python中构建RESTful API时,可以选择轻量级的Flask或全栈的Django框架。Flask适用于小型到中型API,而Django适合大型复杂项目。示例代码展示了如何在两个框架中创建任务列表API。
                                          74 0
                                          |
                                          8月前
                                          |
                                          JSON API 数据格式
                                          RESTful API 最佳实践
                                          RESTful API 最佳实践
                                          181 0
                                          |
                                          XML 设计模式 JSON
                                          RESTful:理解REST架构风格、RESTful API
                                          RESTful:理解REST架构风格、RESTful API
                                          2252 1
                                          |
                                          自然语言处理 API 网络架构
                                          【Elasticsearch】Rest风格API(二)
                                          【Elasticsearch】Rest风格API
                                          111 0
                                          【Elasticsearch】Rest风格API(二)
                                          |
                                          存储 JSON 自然语言处理
                                          【Elasticsearch】Rest风格API(一)
                                          【Elasticsearch】Rest风格API
                                          181 0
                                          【Elasticsearch】Rest风格API(一)
                                          |
                                          Java API Maven
                                          快速集成Elasticsearch Restful API案例分享
                                          快速集成Elasticsearch Restful API案例分享
                                          318 0
                                          |
                                          存储 JSON API
                                          Elasticsearch实战(四)-Kibana常见RESTful API操作
                                          Elasticsearch实战(四)-Kibana常见RESTful API操作
                                          1033 0
                                          Elasticsearch实战(四)-Kibana常见RESTful API操作
                                          |
                                          Linux API 数据库
                                          Elasticsearch:RESTful风格API
                                          Elasticsearch:RESTful风格API
                                          141 0