国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot整合Elasticsearch并實現CRUD操作

SpringBoot整合Elasticsearch并實現CRUD操作

2021-04-10 13:35zxc123e Java教程

這篇文章主要介紹了SpringBoot整合Elasticsearch并實現CRUD操作,需要的朋友可以參考下

 配置準備

在build.gradle文件中添加如下依賴:

?
1
2
3
4
5
compile "org.elasticsearch.client:transport:5.5.2"
compile "org.elasticsearch:elasticsearch:5.5.2"
//es 5.x的內部使用的 apache log4日志
compile "org.apache.logging.log4j:log4j-core:2.7"
compile "org.apache.logging.log4j:log4j-api:2.7"

這里spring boot使用的是1.5.4版,前些天spring boot 2正式版已經發布,spring boot 2新特性中有一條是支持kotlin,spring boot 2基于spring 5,spring 5也支持了koltin,所以spring也開始支持函數式編程。

關于版本兼容

SpringBoot整合Elasticsearch并實現CRUD操作

配置訪問Elasticsearch的客戶端,這里都使用原生es JavaAPI。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Configuration
public class ElasticSearchConfig {
  @Bean(name = "client")
  public TransportClient getClient() {
    InetSocketTransportAddress node = null;
    try {
      node = new InetSocketTransportAddress(InetAddress.getByName("192.168.124.128"), 9300);
    } catch (UnknownHostException e) {
      e.printStackTrace();
    }
    Settings settings = Settings.builder().put("cluster.name", "my-es").build();
    TransportClient client = new PreBuiltTransportClient(settings);
    client.addTransportAddress(node);
    return client;
  }
}

SocketTransport端口可以使用http://ip:9200/_nodes方式查看,這里默認使用的是9300端口。

CRUD操作

新建一個控制器ElasticSearchController,使用原生的es JavaAPI。

?
1
2
3
4
5
@RestController
public class ElasticSearchController {
  @Autowired
  TransportClient client;
}

在控制器中添加增刪查改方法

增加操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@PostMapping("add/book/novel")
  public ResponseEntity add(
      @RequestParam(name = "title") String title, @RequestParam(name = "authro") String author,
      @RequestParam(name = "word_count") int wordCount,
      @RequestParam(name = "publish_date") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")Date publishDate
      )
  {
    try {
      XContentBuilder content = XContentFactory.jsonBuilder().startObject()
          .field("title", title)
          .field("author", author)
          .field("word_count", wordCount)
          .field("publish_date", publishDate.getTime())
          .endObject();
      IndexResponse result = this.client.prepareIndex("book", "novel").setSource(content).get();
      return new ResponseEntity(result.getId(), HttpStatus.OK);
    } catch (IOException e) {
      e.printStackTrace();
      return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
    }
  }

刪除操作

?
1
2
3
4
5
6
@DeleteMapping("/delete/book/novel")
  public ResponseEntity delete(@RequestParam(name = "id") String id)
  {
    DeleteResponse result = client.prepareDelete("book", "novel", id).get();
    return new ResponseEntity(result.getResult().toString(), HttpStatus.OK);
  }

查找操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@GetMapping("/get/book/novel")
  public ResponseEntity get(@RequestParam(name = "id", defaultValue="") String id)
  {
    if (id.isEmpty())
    {
      return new ResponseEntity(HttpStatus.NOT_FOUND);
    }
    GetResponse result = this.client.prepareGet("book", "novel", id).get();
    if (!result.isExists())
    {
      return new ResponseEntity(HttpStatus.NOT_FOUND);
    }
    return new ResponseEntity(result.getSource(), HttpStatus.OK);
  }

更新操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@PutMapping("/put/book/novel")
  public ResponseEntity update(@RequestParam(name = "id") String id, @RequestParam(name = "title", required = false) String title,
    @RequestParam(name = "author", required = false) String author
  )
  {
    try {
      XContentBuilder builder = XContentFactory.jsonBuilder().startObject();
      if (title!= null)
      {
        builder.field("title", title);
      }
      if (author != null)
      {
        builder.field("author", author);
      }
      builder.endObject();
      UpdateRequest updateRequest = new UpdateRequest("book", "novel", id);
      updateRequest.doc(builder);
      UpdateResponse result = client.update(updateRequest).get();
      return new ResponseEntity(result.getResult().toString(), HttpStatus.OK);
    } catch (Exception e) {
      e.printStackTrace();
      return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
    }
  }

復合查找

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@GetMapping("/query/book/novel")
  public ResponseEntity query(@RequestParam(name = "author", required = false) String author,
                   @RequestParam(name = "title", required = false) String title,
                   @RequestParam(name = "gt_word_count", defaultValue = "0") int gtWordCount,
                   @RequestParam(name = "lt_word_count", required = false) Integer ltWordCount)
  {
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    if (author != null)
    {
      boolQueryBuilder.must(QueryBuilders.matchQuery("author",author));
    }
    if (title != null)
    {
      boolQueryBuilder.must(QueryBuilders.matchQuery("title", title));
    }
    RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("word_count").from(gtWordCount);
    if (ltWordCount != null && ltWordCount > 0)
    {
      rangeQueryBuilder.to(ltWordCount);
    }
    boolQueryBuilder.filter(rangeQueryBuilder);
    SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch("book")
        .setTypes("novel")
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
        .setQuery(boolQueryBuilder)
        .setFrom(0)
        .setSize(10);
    System.out.println(searchRequestBuilder); //調試用
    SearchResponse response = searchRequestBuilder.get();
    List<Map<String, Object>> result = new ArrayList<>();
    for (SearchHit hit : response.getHits())
    {
      result.add(hit.getSource());
    }
    return new ResponseEntity(result, HttpStatus.OK);
  }

上面的代碼組織的復合查詢類似下面的Query DSL:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
  "query":{
    "bool":{
      "must":[
        {"match":{"author":"張三"}},
        {"match":{"title":"Elasticsearch"}}
      ],
      "filter":[
        {"range":
          {"word_count":{
              "gt":"0",
              "lt":"3000"
            }
          }
        }
      ]
    }
  }
}

總結

以上所述是小編給大家介紹的SpringBoot整合Elasticsearch并實現CRUD操作,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/zxc123e/article/details/79498113

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: www.夜夜爽 | 日韩成人在线免费视频 | 天天操天天操 | 国产欧美一区二区精品性色 | 亚洲成人免费视频 | 日本在线视频一区二区 | 色综合色综合网色综合 | av网站在线免费观看 | 欧美日韩国产一区二区三区 | 欧美日韩精品网站 | 免费成人高清 | 亚洲精品第一区在线观看 | 欧美日韩国产一级片 | 亚洲精品麻豆 | 中文字幕国产 | 日韩精品免费在线视频 | 亚洲精品视频一区二区三区 | 欧美日韩免费一区二区三区 | 91精品一久久香蕉国产线看观看新通道出现 | 亚洲视频一区二区 | 欧美日韩一区在线 | 免费一级毛片电影 | 日韩一区二区三区在线观看 | 成人av网站免费观看 | 国产成人精品亚洲日本在线观看 | 欧美日韩精品在线观看 | 欧美在线亚洲 | 日本一区二区三区在线视频 | 亚洲视频三区 | 伊人久久综合影院 | 这里只有精品视频在线 | 久久99精品久久久久久噜噜 | 日韩视频精品 | 国产精品一区二区三区不卡 | 91av电影在线观看 | 精品一区二区三区在线视频 | 亚洲成人自拍 | 激情欧美日韩一区二区 | 正在播放国产精品 | 亚洲国产高清高潮精品美女 | 国产精品网站在线观看 |