elasticsearch增删改查,删除elasticsearch索引
ElasticSearch--增删改查(postman)
创建索引和type,也就是建库建表
PUT
DELETE
POST
POST
POST
PUT
按照id修改
POST
按照id查询
GET
(1)GET
普通查询,查找status为0的数据
==
GET
GET
POST
15分钟掌握Elasticsearch 8大核心概念与基础用法
Elastic已经形成了一个较为庞大的生态,这个生态的核心就是Elasticsearch。初学者的重点就是如何快速地了解并使用Elasticsearch,本文总结了Elasticsearch的8大核心概念和安装、用法,15分钟实现入门并且掌握Elasticsearch的简单使用。
Elasticsearch提供一整套的Rest API用以支持各种索引、文档、搜索等操作。这里我们简单以索引的创建、查询和删除为例子来了解如何操作Elasticsearch。
Elasticsearch中的数据以文档document的形式存储在索引中,Elasticsearch提供了一系列的 _doc Rest API 用来操作document的增删改查,下面以已经创建的customer索引为基础,实践一下对于Elasticsearch中document的操作。
我们已经掌握了Elasticsearch创建索引,增加和更新文档的操作,下来就是重头戏搜索。Elasticsearch天生具备搜索的强支持能力,与document、index一样,有一套专门的_search API来支持搜索功能,还有很多的搜索特性,不同的搜索类型,搜索功能较为复杂。在本小节只介绍最简单的搜索API,以期能快速进入Elasticsearch搜索的大门。
数据搜索基本使用HTTP GET方法,_search API根据查询参数的位置的不同支持两种形式:
经过以上的实践,相信基本上可以简单的掌握Elasticsearch的基础用法以及对相关的核心概念都有了一定的认识,接下来跟我一起深入学习Elasticsearch的核心功能吧。
更多干活文章,微信搜索“ElasticExpert”。
ElasticSearch CURD(增删改查)操作
1、document的全量替换型修改:该方式是直接替换类型是 product id=1的文档。该方式必须带上所有的field,才能去进行信息的修改。
例如:
语法:
demo:
1、搜索全部商品
1、搜索商品名称包含yagao,而且售价大于25元的商品
全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配, 只要能匹配上任意一个拆解后的单词,就可以作为结果返回 。
1、根据一段文字进行查找
输入的搜索串分此后,进行完全顺序匹配。 必须在指定的字段文本中,完全包含搜索串分此后的全部结果,才可以算匹配 ,作为结果返回。
slop 参数其实就是你允许你输入的词里面中间还能隔着几个词。
Spring Boot整合ElasticSearch实现增删改查基本示例
ElasticSearch被命名为大数据搜索引擎,在文件检索、数据存储方面具有天然的优势。而SpringBoot作为服务整合中间件,在服务组装方面是一款万能粘合器,本文主要提供Spring Boot整合ElasticSearch基本增删改示例。
ElasticSearch安装过程可参考博主之前笔文:
ElasticSearch基本介绍可参考博主之前笔文:
Maven工程引入:
org.springframework.boot
spring-boot-starter-data-elasticsearch
注意:ElasticSearch版本号与Spring Boot版本号是有关联的,本文笔者Spring Boot版本号是2.1.6,因此安装的ElasticSearch版本号是7.7.0。
package com.opendi.generator.elasticsearch.model;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.util.List;
@Data
@Document(indexName="post", type="post",shards=1,replicas = 0)
public class Post {
@Id
private String id;
private String title;
@Field(type=FieldType.Nested)
private List tags;
}
package com.opendi.generator.model;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
@Data
@Document(indexName = "book", type = "_doc", shards = 1, replicas = 0)
public class BookBean {
@Id
private String id;
@Field(type = FieldType.Keyword)
private String title;
@Field(type = FieldType.Keyword)
private String author;
@Field(type = FieldType.Keyword)
private String postDate;
public BookBean(){}
public BookBean(String id, String title, String author, String postDate){
this.id=id;
this.title=title;
this.author=author;
this.postDate=postDate;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPostDate() {
return postDate;
}
public void setPostDate(String postDate) {
this.postDate = postDate;
}
@Override
public String toString() {
return "BookBean{" +
"id='" + id + ''' +
", title='" + title + ''' +
", author='" + author + ''' +
", postDate='" + postDate + ''' +
'}';
}
}
package com.opendi.generator.elasticsearch.mapper;
import com.opendi.generator.elasticsearch.model.Post;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface PostRepository extends ElasticsearchRepository {
Page findByTitle(String title, Pageable pageable);
}
package com.opendi.generator.dao;
import com.opendi.generator.model.BookBean;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
/**
* 接口关系:
* ElasticsearchRepository -- ElasticsearchCrudRepository -- PagingAndSortingRepository -- CrudRepository
*/
public interface BookRepository extends ElasticsearchRepository {
//Optional findById(String id);
Page findByAuthor(String author, Pageable pageable);
Page findByTitle(String title, Pageable pageable);
}
使用了ElasticSearch里面的操作工具对数据进行操作。
package com.opendi.generator.elasticsearch.service;
import com.opendi.generator.elasticsearch.model.Post;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import java.util.Optional;
public interface PostService {
Post save(Post post);
Optional findOne(String id);
Iterable findAll();
Page findByTitle(String title, PageRequest pageRequest);
}
指定操作对象:
package com.opendi.generator.elasticsearch.service.impl;
import com.opendi.generator.elasticsearch.mapper.PostRepository;
import com.opendi.generator.elasticsearch.model.Post;
import com.opendi.generator.elasticsearch.service.PostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
public class PostServiceImpl implements PostService {
@Autowired
private PostRepository postRepository;
@Override
public Post save(Post post) {
postRepository.save(post);
return post;
}
@Override
public Optional findOne(String id) {
return postRepository.findById(id);
}
@Override
public Iterable findAll() {
return postRepository.findAll();
}
@Override
public Page findByTitle(String title, PageRequest pageRequest) {
return postRepository.findByTitle(title, pageRequest);
}
}
package com.opendi.generator.service;
import com.opendi.generator.model.BookBean;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import java.util.List;
import java.util.Optional;
public interface BookService {
Optional findById(String id);
BookBean save(BookBean blog);
void delete(BookBean blog);
Optional findOne(String id);
List findAll();
Page findByAuthor(String author, PageRequest pageRequest);
Page findByTitle(String title, PageRequest pageRequest);
}
package com.opendi.generator.service.impl;
import com.opendi.generator.dao.BookRepository;
import com.opendi.generator.model.BookBean;
import com.opendi.generator.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service("blogService")
public class BookServiceImpl implements BookService {
@Autowired
@Qualifier("bookRepository")
private BookRepository bookRepository;
@Override
public Optional findById(String id) {
//CrudRepository中的方法
return bookRepository.findById(id);
}
@Override
public BookBean save(BookBean blog) {
return bookRepository.save(blog);
}
@Override
public void delete(BookBean blog) {
bookRepository.delete(blog);
}
@Override
public Optional findOne(String id) {
return bookRepository.findById(id);
}
@Override
public List findAll() {
return (List ) bookRepository.findAll();
}
@Override
public Page findByAuthor(String author, PageRequest pageRequest) {
return bookRepository.findByAuthor(author,pageRequest);
}
@Override
public Page findByTitle(String title, PageRequest pageRequest) {
return bookRepository.findByTitle(title,pageRequest);
}
}
会调用ElasticSearch底层功能进行操作,能够实现ElasticSearch增删改操作。
连接服务器ElasticSearch连接配置:
spring:
data:
elasticsearch:
cluster-name: es2018
cluster-nodes: 10.172.8.154:9300
repositories:
enabled: true
elasticsearch:
jest:
uris: http:// 10.172.8.154:9200
增加连接配置,这样就能连接ElasticSearch客户端了。
ElasticSearch在Controller操作:
package com.opendi.generator.controller;
import com.opendi.generator.model.BookBean;
import com.opendi.generator.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RestController
public class ElasticController {
@Autowired
private BookService bookService;
@RequestMapping("/book/{id}")
@ResponseBody
public BookBean getBookById(@PathVariable String id){
Optional opt =bookService.findById(id);
BookBean book=opt.get();
System.out.println(book);
return book;
}
@RequestMapping("/save")
@ResponseBody
public void Save(){
System.setProperty("es.set.netty.runtime.available.processors", "false");
BookBean book=new BookBean("1","ES入门教程","程裕强","2018-10-01");
System.out.println(book);
bookService.save(book);
}
}
package com.opendi.generator.elasticsearch.controller;
import com.opendi.generator.elasticsearch.model.Post;
import com.opendi.generator.elasticsearch.model.Tag;
import com.opendi.generator.elasticsearch.service.PostService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Api(tags="ElasticSearch示例")
@RestController
public class PostController {
@Autowired
private PostService postService;
@ApiOperation(value="得到ES结果")
@GetMapping(value="getList")
public Listpage getList()/page
{
Listpage list = new ArrayListpage ();/page /page
Tag tag = new Tag();
tag.setId("1");
tag.setName("tech");
Tag tag2 = new Tag();
tag2.setId("2");
tag2.setName("elasticSearch");
Post post = new Post();
post.setId("1");
post.setTitle("This is post");
post.setTags(Arrays.asList(tag,tag2));
postService.save(post);
Post post2 = new Post();
post2.setId("2");
post2.setTitle("Biding2");
post2.setTags(Arrays.asList(tag));
postService.save(post2);
Page posts = postService.findByTitle("This is post", new PageRequest(0, 10));
Page posts2 = postService.findByTitle("Biding2", new PageRequest(0,10));
Page posts3 = postService.findByTitle("Biding2", new PageRequest(0,10));
list.add(posts);
list.add(posts2);
list.add(posts3);
return list;
}
}
控制台打印:
Elasticsearch数据增删改
? ? 本文介绍 ElasticSearch 增加、删除、修改的使用示例。通过Restful 接口和 Postman实现.ElasticSearch 版本为6.3.2。
关于索引的创建请参考:
关于es的安装请参考:
我先创建一个叫local_mst_student_idx_1的索引,通过hand插件观察他的count条数为0.(详细见下图)
单条新增(指定_id):
URL:http://服务ip:端口/索引index/type/_id
单条新增(不指定_id):
URL:http://服务ip:端口/索引index/type
es会自动生成一个唯一的_id
批量新增:
关于批量新增我们需要创建一个.json的文件,里面构建json数据。(如下图)
通过postman请求:
注意:通过post请求body这时候需要选择bonary,然后选择我们刚刚创建的.json文件即可。(详细如下图)
点击执行我们可能会遇到下面这种情况,那是因为body的类型是text类型的,它不支持,我们点击下拉框改成JSON选项就ok了。
下面我展示一下执行批量新增的效果图:
上面明显的返回了我们新增的数据信息。
(注:批量新增可以在URL中指定index和type也可已在.json文件中指定;我上面是使用URL指定index和type的,官网文档案例是在.json文档中指定,大家可以参考一下。)
关于批量新增有啥疑问的可以参考官方文档:
执行完后我们通过hand插件观察Elasticsearch数据情况:(如下图)
很清晰的看出我们新增的数据已经全部到ES里面。
单个删除:
URL:http://服务ip:端口号/索引index/type/_id? ?(_id:指定删除)
单个删除比较简单:(如下图)
查询式删除:
通过条件查询删除某些符合条件的数据;我们测试把张三和王五删除掉。
关于批量删除有什么疑问的可以参考官方文档:
执行成功后观察数据是否被删除:
ES修改操作有一种特殊;假如我们使用下图这种请求
通过观察我指定_id为4的数据进行修改,他只修改了我传参的stu_name字段,并把其他字段全部改为空了。
其实是这样的:
????当我们发送该请求后,如果不存在_id=4的文档数据,索引中将新建一个文档_id=4,如果索引中在之前已经存在_id=4的文档数据,新文档数据将覆盖历史文档数据。如果我们存入的文档id和已存在的文档id都不相同则不会影响。索引文档时,_id部分是可选的,我们上面也有案例,如果未指定,es将生成一个随机_id,然后用它来创建新文档。当然我可能不想要这种效果。别急下面我来讲解另外一种修改方式。
修改数据2:
这里我们发现和上面的请求有哪些不同,我们发现下面图片的 URL 的末尾多了一个_update请求命令.
这种更新其实也不是在原文档进行就地更新。es无论何时进行更新他都会删除旧文档,索引一个新文档来立刻替换它。当然es还提供了多条件的修改。我们可以参考官方文档去挖掘在此我就不详细的讲解了。
关于es多条件的修改可以参考官方文档:
关于增删改我们就讲到这,新的探索我会再第一时间给大家分享。