Elasticsearch基本概念和使用(3)

示例:

POST /heima/goods/2 { "title":"大米手机", "images":"http://image.leyou.com/12479122.jpg", "price":2899.00 }

得到的数据:

{ "_index": "heima", "_type": "goods", "_id": "2", "_score": 1, "_source": { "title": "大米手机", "images": "http://image.leyou.com/12479122.jpg", "price": 2899 } } 1.6.3.智能判断

在学习Solr时我们发现,我们在新增数据时,只能使用提前配置好映射属性的字段,否则就会报错。

不过在Elasticsearch中并没有这样的规定。

事实上Elasticsearch非常智能,你不需要给索引库设置任何mapping映射,它也可以根据你输入的数据来判断类型,动态添加数据映射。

测试一下:

POST /heima/goods/3 { "title":"超米手机", "images":"http://image.leyou.com/12479122.jpg", "price":2899.00, "stock": 200, "saleable":true }

我们额外添加了stock库存,和saleable是否上架两个字段。

来看结果:

{ "_index": "heima", "_type": "goods", "_id": "3", "_version": 1, "_score": 1, "_source": { "title": "超米手机", "images": "http://image.leyou.com/12479122.jpg", "price": 2899, "stock": 200, "saleable": true } }

在看下索引库的映射关系:

{ "heima": { "mappings": { "goods": { "properties": { "images": { "type": "keyword", "index": false }, "price": { "type": "float" }, "saleable": { "type": "boolean" }, "stock": { "type": "long" }, "title": { "type": "text", "analyzer": "ik_max_word" } } } } } }

stock和saleable都被成功映射了。

如果存储的是String类型数据,ES无智能判断,他就会存入两个字段。例如:

存入一个name字段,智能形成两个字段:

name:text类型

name.keyword:keyword类型

1.7.修改数据

把刚才新增的请求方式改为PUT,就是修改了。不过修改必须指定id,

id对应文档存在,则修改

id对应文档不存在,则新增

比如,我们把id为3的数据进行修改:

PUT /heima/goods/3 { "title":"超大米手机", "images":"http://image.leyou.com/12479122.jpg", "price":3899.00, "stock": 100, "saleable":true }

结果:

{ "took": 17, "timed_out": false, "_shards": { "total": 9, "successful": 9, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 1, "hits": [ { "_index": "heima", "_type": "goods", "_id": "3", "_score": 1, "_source": { "title": "超大米手机", "images": "http://image.leyou.com/12479122.jpg", "price": 3899, "stock": 100, "saleable": true } } ] } } 1.8.删除数据

删除使用DELETE请求,同样,需要根据id进行删除:

语法

DELETE /索引库名/类型名/id

示例:

Elasticsearch基本概念和使用

2.查询

我们从4块来讲查询:

基本查询

_source过滤

结果过滤

高级查询

排序

2.1.基本查询:

基本语法

GET /索引库名/_search { "query":{ "查询类型":{ "查询条件":"查询条件值" } } }

这里的query代表一个查询对象,里面可以有不同的查询属性

查询类型:

例如:match_all, match,term , range 等等

查询条件:查询条件会根据类型的不同,写法也有差异,后面详细讲解

2.1.1 查询所有(match_all)

示例:

GET /heima/_search { "query":{ "match_all": {} } }

query:代表查询对象

match_all:代表查询所有

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11604.html