示例:
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值示例:
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:代表查询所有