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而非POST,POST每次都会创建一条新的记录,对于同一个请求,并不会由于索引重复而报错。

查看索引

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     // 不可作为查询字段
        }
    }
}
相关推荐
计算机编程指导师16 分钟前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
QYR_112 小时前
机械制造用固体润滑涂层市场分析:2032年全球市场规模预计达8.78亿元,CAGR为6.2%
大数据·人工智能·物联网
数字化顾问2 小时前
(144页PPT)数字化转型汽车企业数智化战略规划(附下载方式)
大数据
智慧物业老杨3 小时前
数字底座,重构小区治理秩序
大数据
计算机编程指导师4 小时前
【计算机毕设选题推荐】基于Hadoop的宫颈癌变进程光谱数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·宫颈癌变
guhunyihan4 小时前
无代码系统搭建平台,探索恐象 AI 带来的开发新范式
大数据·人工智能
计算机编程指导师5 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的化妆品销售大数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·化妆品
benchmark_cc5 小时前
前复权数据每天可能变化,历史数据库应该覆盖还是保留原始价格?
大数据·python·pandas·量化交易·股票数据·quantdash
计算机编程指导师5 小时前
计算机毕设选题推荐:Hadoop大数据下的个体肥胖健康风险评估与可视化系统源码 毕业设计 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·肥胖健康风险
墨神谕5 小时前
RPC框架与HTTP REST的区别
网络协议·http·rpc