美文网首页
ElasticSearch CURD (step 2)

ElasticSearch CURD (step 2)

作者: jaymz明 | 来源:发表于2019-08-16 09:40 被阅读0次

继续ELK。
今天主要学习了下ElasticSearch的CURD。用到一个head插件,可以可视化es内部的数据。下载地址:https://github.com/mobz/elasticsearch-head
需要注意的是为了能让它和ES进行通信,需要在设置跨域。在ES的config中添加

http.cors.enabled:true
http.cors.allow-origin:"*"

成功启动之后,会出现以下的页面。

image.png

配置多集群
在config/elasticsearch.yml文件中新增

node.name: master
node.master: true
network.host:127.0.0.1

这样我们就配好了集群的master节点。node 节点安装同master节点一致。区别在于在config中配置需要指定cluster.name和master一致,并且需要设置http.port以及绑定master节点:discovery.zen.ping.unicast.hosts:[127.0.0.1] 。
索引:含有相同属性的文档集合(类似于数据库)
类型:索引可以定义一个或者多个类型,文档必须属于一个类型(类似于表)
文档:文档是可以被索引的基本数据单位(类似于一条记录)

结合springboot来编写CURD

  1. 首先我们现在es中建立index:people,type为man,三个字段:name,age,date。如下图:
put index.png
  1. 在pom中引入ES
     <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>6.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.4.3</version>
        </dependency>
  1. 编写与ES server的config。
@Configuration
class MyEsConfig {
    @Bean
    public TransportClient client() {
        Settings settings = Settings.builder()
                .put("client.transport.sniff", true)
                .put("cluster.name", "elasticsearch").build();
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(new InetSocketAddress("16.155.196.55", 9300)));
        return client;
    }
}
  1. CURD
    @Autowired
    private TransportClient client;

//read
@GetMapping("/get/people/man")
    @ResponseBody
    public ResponseEntity get(@RequestParam(name = "id", defaultValue = "") String id) {
        if (id.isEmpty()) {
            return new ResponseEntity(HttpStatus.NOT_FOUND);
        }
        GetResponse result = this.client.prepareGet("people", "man", id).get();
        if (!result.isExists()) {
            return new ResponseEntity(HttpStatus.NOT_FOUND);
        }
        return new ResponseEntity(result.getSource(), HttpStatus.OK);
    }

//add
@PostMapping("/add/people/man")
    @ResponseBody
    public ResponseEntity add(@RequestParam(name = "name", defaultValue = "") String name,
                              @RequestParam(name = "age", defaultValue = "") String age,
                              @RequestParam(name = "date")
                              @DateTimeFormat(pattern = "yyyy-MM-dd")
                                      Date date) {
        try {
            XContentBuilder content = XContentFactory.jsonBuilder()
                    .startObject()
                    .field("name", name)
                    .field("age", age)
                    .field("date", date.getTime())
                    .endObject();
            IndexResponse result = this.client.prepareIndex("people", "man").setSource(content).get();
            return new ResponseEntity(result.getId(), HttpStatus.OK);
        } catch (IOException e) {
            e.printStackTrace();
            return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
        }

    }
//delete
 @DeleteMapping("/delete/people/man")
    @ResponseBody
    public ResponseEntity delete(@RequestParam(name = "id") String id) {
        DeleteResponse result = this.client.prepareDelete("people", "man", id).get();
        return new ResponseEntity(result.getResult().toString(), HttpStatus.OK);
    }

//update
 @PutMapping("/update/people/man")
    @ResponseBody
    public ResponseEntity update(@RequestParam(name = "id") String id,
                                 @RequestParam(name = "name", required = false) String name,
                                 @RequestParam(name = "age", required = false) String age) {
        UpdateRequest update = new UpdateRequest("people", "man", id);
        try {
            XContentBuilder builder = XContentFactory.jsonBuilder().startObject();
            if (name != null) {
                builder.field("name", name);
            }
            if (age != null) {
                builder.field("age", age);
            }
            builder.endObject();
            update.doc(builder);
            UpdateResponse result = this.client.update(update).get();
            return new ResponseEntity(result.getResult().toString(), HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

// complex query
@PostMapping("/query/people/man")
    @ResponseBody
    public ResponseEntity query(@RequestParam(name = "name") String name,
                                @RequestParam(name = "age") String age) {
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        if (name != null) {
            boolQueryBuilder.must(QueryBuilders.matchQuery("name", name));
        }
        if (age != null) {
            boolQueryBuilder.must(QueryBuilders.matchQuery("age", age));
        }
        SearchRequestBuilder builder = this.client.prepareSearch("people").setTypes("man")
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setQuery(boolQueryBuilder).setSize(10);
        SearchResponse response = builder.get();
        List<Map<String, Object>> result = new ArrayList<>();
        for (SearchHit s : response.getHits()) {
            result.add(s.getSourceAsMap());
        }
        return new ResponseEntity(result, HttpStatus.OK);

    }
insert indexdata.png

测试时候我们用postman来进行调试,还是挺方便的。

springboot_query.png

相关文章

网友评论

      本文标题:ElasticSearch CURD (step 2)

      本文链接:https://www.haomeiwen.com/subject/yexdjctx.html