elasticsearch增删改查,删除elasticsearch索引

http://www.itjxue.com  2023-01-14 19:52  来源:未知  点击次数: 

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多条件的修改可以参考官方文档:

关于增删改我们就讲到这,新的探索我会再第一时间给大家分享。

(责任编辑:IT教学网)

更多