赞
踩
https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-0
下载完成启动bin/elasticsearch
服务,可以在Postman
调试各种请求。
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
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
,重复调用会有冲突。
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
就是增量更新,否则为全亮更新。
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 ] } ] } }
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
的数据。默认查询时用的并不是全词匹配,比如:
{
"query": {
"match": {
"name": "su7"
}
}
}
能匹配到name = "xiaomi su7" / "xiaomi su7 pro"
的数据。
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 } ] } } }
可以为某个索引设置一些映射的字段,包括字段是否能用分词查询(否则全亮匹配)、是否能用来查询。
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 // 不可作为查询字段 } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。