Elasticsearch - HTTP

文章目录

安装

https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-0

下载完成启动bin/elasticsearch服务,可以在Postman调试各种请求。

基本语法

索引

创建索引
javascript 复制代码
PUT: http://127.0.0.1:9200/shopping

Response:
{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "shopping"
}

多次创建同一个索引时,会报错,说明创建请求是幂等性的(同一个操作执行多次和执行一次效果相同,不会因为多次执行而产生不同的效果)。所以应该用PUT而非POSTPOST每次都会创建一条新的记录,对于同一个请求,并不会由于索引重复而报错。

查看索引

GET: http://127.0.0.1:9200/shopping

包含了每个索引的健康状况、状态、名称、唯一ID(UUID)、分片数(primary和replica)、包含的文档数、删除的文档数、以及存储大小所有主分片占用的物理磁盘空间总。

删除索引

DELETE: http://127.0.0.1:9200/shopping

文档

创建文档
javascript 复制代码
POST: http://127.0.0.1:9200/shopping/_doc`或者`POST: http://127.0.0.1:9200/shopping/_create

Request body:
{
    "name": "xiaomi su7",
    "type": 1,
    "price": 29.99
}

Response:
{
    "_index": "shopping",
    "_type": "_doc",
    "_id": "bhajbY8BDgHLWJjh9Xp7",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 1,
    "_primary_term": 1
}

如果觉得id不好记忆,可以指定id创建文档:POST/PUT: http://127.0.0.1:9200/shopping/_doc/1001,重复调用会更新文档,如果明确用_create,重复调用会有冲突。

更新文档
javascript 复制代码
POST: http://127.0.0.1:9200/shopping/_update/1001

Request body:
{
    "doc": {
        "compony": "xiaomi "
    }
}

Response:
{
    "_index": "shopping",
    "_type": "_doc",
    "_id": "1001",
    "_version": 9,
    "result": "updated",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 10,
    "_primary_term": 1
}

如果加上doc就是增量更新,否则为全亮更新。

匹配查询
javascript 复制代码
GET: http://127.0.0.1:9200/shopping/_search

Request Body:
{
    "query": {
        "match_all": {
        }
        /**
        "match": {
            "compony": "xiaomi"
        }
		*/

    "from": 0,
    "size": 2,
    "_source": ["type", "price"],
    "sort": {
        "price": {
            "order": "desc"
        }
    }
}

Response:
{
    "took": 8,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 4,
            "relation": "eq"
        },
        "max_score": null,
        "hits": [
            {
                "_index": "shopping",
                "_type": "_doc",
                "_id": "1003",
                "_score": null,
                "_source": {
                    "price": 39.99,
                    "type": 1
                },
                "sort": [
                    39.99
                ]
            },
            {
                "_index": "shopping",
                "_type": "_doc",
                "_id": "bhajbY8BDgHLWJjh9Xp7",
                "_score": null,
                "_source": {
                    "price": 29.99,
                    "type": 1
                },
                "sort": [
                    29.99
                ]
            }
        ]
    }
}
多条件查询
javascript 复制代码
GET: http://127.0.0.1:9200/shopping/_search

Request Body:
{
    "query": {
        "bool": {
        	// 数组里的条件同时满足
            "must": [
                {
                    "match": {
                        "name": "xiaomi su7"
                    }
                },
                {
                    "match": {
                        "type": 1
                    }
                }
            ],
            // 数组里的条件满足一个即可
            "should": [
                {
                    "match": {
                        "price": 39.99
                    }
                }
            ],
            // 对结果进行范围过滤
            "filter": {
                "range": {
                    "price": {
                        "gt": 30
                    }
                }
            }
        }
    }
}

Response:
{
    "took": 9,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 2.2391143,
        "hits": [
            {
                "_index": "shopping",
                "_type": "_doc",
                "_id": "1003",
                "_score": 2.2391143,
                "_source": {
                    "name": "xiaomi su7 pro",
                    "type": 1,
                    "price": 39.99
                }
            }
        ]
    }
}

match 是分词检索,doc在存储的时候是倒排索引,会把里面的字段按空格(实验结果)拆成一些词,每个词都会对应一条id的数据。默认查询时用的并不是全词匹配,比如:

javascript 复制代码
{
    "query": {
        "match": {
            "name": "su7"
        }
    }
}

能匹配到name = "xiaomi su7" / "xiaomi su7 pro" 的数据。

聚合查询
javascript 复制代码
GET: http://127.0.0.1:9200/shopping/_search

Request Body:
{
    "aggs": {
        "price_group": {
            "terms": { // 分组
                "field": "price"
            }
        }
    },
    "size": 0
}

Response:
{
    "took": 15,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 4,
            "relation": "eq"
        },
        "max_score": null,
        "hits": []
    },
    "aggregations": {
        "price_group": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": 29.989999771118164,
                    "doc_count": 2
                },
                {
                    "key": 39.9900016784668,
                    "doc_count": 1
                }
            ]
        }
    }
}
映射

可以为某个索引设置一些映射的字段,包括字段是否能用分词查询(否则全亮匹配)、是否能用来查询。

javascript 复制代码
PUT: http://127.0.0.1:9200/user/_mapping

Request Body:
{
    "properties": {
        "name": {
            "type": "text", // 可分词查询
            "index": true.  // 可作为查询字段   
        },
        "sex": {
            "type": "keyword", // 只能全亮匹配
            "index": true
        },
        "tel": {
            "type": "keyword",
            "index": false     // 不可作为查询字段
        }
    }
}
相关推荐
小羊没烦恼!9 分钟前
Memory 记忆设计讨论:Agent Memory 的安全边界:权限、删除、版本与回执
java·大数据·word·powerpoint·.net
喻师傅44 分钟前
Apache Hudi 概述:从 Parquet 更新难题到数据湖 Upsert
大数据·数据仓库·big data
qq29531 小时前
自然语言投研 Agent 的工程化选型:从问财式 NL2SQL 到多智能体投研社区
大数据·人工智能
一隅论数智1 小时前
数据消费主体变了:智能时代如何重构业务管理逻辑
大数据·人工智能·经验分享·笔记·学习·行业数字化
时下握今1 小时前
战略数据分析完整流程:从桌面研究、调研取证到报告落地
大数据·人工智能
用户3610588626121 小时前
Flink高级之富函数类深度剖析:执行时序、状态注册与序列化陷阱
大数据·flink
Safeploy安策数据1 小时前
密钥管理入门:从泄漏复盘看企业如何守住密钥安全底线
大数据·运维·微服务
上海蓝色星球1 小时前
蓝色星球NG-AIOS新型AI工业操作系统重磅发布——以本体智能为内核,重构“AI+制造“新范式
大数据·数据库·人工智能·机器人
做萤石二次开发的哈哈2 小时前
视频汇集平台模板上线萤石蓝海AIoT一站式工作台:多品牌摄像机+NVR统一接入,GB/T28181国标级联实现工程施工多方视频调度(附部署教程)
大数据·人工智能·物联网·音视频·萤石开放平台·蓝海aiot一站式工作台·aiot开发
starzy19902 小时前
Flink高级之Pattern API代码实现:序列语义、循环约束与匹配策略
大数据·flink