第一步:创建项目elasticsearch 编写pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.payease</groupId>
<artifactId>elasticsearch</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>elasticsearch</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<elasticsearch.version>6.1.1</elasticsearch.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!-- Elasticsearch核心依赖包 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<!-- 日志依赖 -->
<!-- ===================== @Getter @Setter @Slf4j @Data ======================== -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

第二步:ElasticSearch配置的构造:创建MyConfig.java文件

package com.payease.elasticsearch;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import java.net.InetAddress;
import java.net.UnknownHostException; /**
* ElasticSearch配置的构造
* @Created By liuxiaoming
* @CreateTime 2017/12/27 下午4:41
**/
@Configuration
public class MyConfig { @Bean
public TransportClient client() throws UnknownHostException{ //es集群连接
TransportAddress node = new TransportAddress(
InetAddress.getByName("localhost"),
9300
);
TransportAddress node1 = new TransportAddress(
InetAddress.getByName("localhost"),
9301
);
TransportAddress node2 = new TransportAddress(
InetAddress.getByName("localhost"),
9302
); //es集群配置(自定义配置) 连接自己安装的集群名称
Settings settings = Settings.builder()
.put("cluster.name","xiaoming")
.build(); PreBuiltTransportClient client = new PreBuiltTransportClient(settings); client.addTransportAddress(node);
client.addTransportAddress(node1);
client.addTransportAddress(node2); return client;
}
}

第三步:配置日志文件log4j2.properties

appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%t] %-5p %c - %m%n rootLogger.level = info
rootLogger.appenderRef.console.ref = console

第四步:在ElasticsearchApplication 启动类中编写

package com.payease.elasticsearch;

import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map; @SpringBootApplication
@RestController
@Slf4j
public class ElasticsearchApplication { @Autowired
private TransportClient client; /*@GetMapping("/")
public String index(){return "index";}*/ //单一查询
@GetMapping("/get/book/novel")
@ResponseBody
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);
} //新增
@PostMapping("add/book/novel")
@ResponseBody
public ResponseEntity add(
@RequestParam(name = "title") String title,
@RequestParam(name = "author") 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);
} } //删除
@DeleteMapping("delete/book/novel")
@ResponseBody
public ResponseEntity delete(@RequestParam(name = "id") String id){
DeleteResponse result = this.client.prepareDelete("book", "novel", id).get();
return new ResponseEntity(result.getResult().toString(),HttpStatus.OK);
}
public static void main(String[] args) {
SpringApplication.run(ElasticsearchApplication.class, args);
} //修改
@PutMapping("update/book/novel")
@ResponseBody
public ResponseEntity update(
@RequestParam(name = "id") String id,
@RequestParam(name = "title", required = false) String title,
@RequestParam(name = "author", required = false) String author
){
UpdateRequest update = new UpdateRequest("book", "novel", id); try {
XContentBuilder builder= XContentFactory.jsonBuilder().startObject();
if (title != null){
builder.field("title", title);
}
if(author != null){
builder.field("author", author);
}
builder.endObject();
update.doc(builder); } catch (IOException e) {
e.printStackTrace();
return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
} try {
UpdateResponse result = this.client.update(update).get();
return new ResponseEntity(result.getResult().toString(), HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
}
} //复合查询
@PostMapping("query/book/novel")
@ResponseBody
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 boolQuery = QueryBuilders.boolQuery(); if(author != null){
boolQuery.must(QueryBuilders.matchQuery("author", author));
} if(title != null){
boolQuery.must(QueryBuilders.matchQuery("title", title));
} RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("word_count").from(gtWordCount); if(ltWordCount != null && ltWordCount > 0){
rangeQuery.to(ltWordCount);
} boolQuery.filter(rangeQuery); SearchRequestBuilder builder = this.client.prepareSearch("book")
.setTypes("novel")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(boolQuery)
.setFrom(0)
.setSize(10); log.info(String.valueOf(builder)); SearchResponse response = builder.get();
List<Map<String, Object>> result = new ArrayList<>(); for (SearchHit hit : response.getHits()){
result.add(hit.getSourceAsMap());
}
return new ResponseEntity(result, HttpStatus.OK); }
}

第五步:启动项目 进行postman验证

1.添加操作:

  1.1 postman请求: POST   localhost:8080/add/book/novel

           添加参数,点击send发送请求

          得到返回值:PFZZl2AB7nlxAXYrVdBg

2.单一查询操作:

  2.1 postman请求: GET   localhost:8080/get/book/novel?id=PFZZl2AB7nlxAXYrVdBg

     点击send发送请求

   得到响应数据     

{
"word_count": 1000,
"author": "作者",
"title": "标题",
"publish_date": 1503590400000
}

3.删除操作:

  3.1 postman请求: DELETE   localhost:8080/delete/book/novel?id=PFZZl2AB7nlxAXYrVdBg

     点击send发送请求

   得到响应数据

DELETED

4.修改操作:

  4.1 postman请求: PUT   localhost:8080/update/book/novel

     点击send发送请求

   得到响应数据

UPDATED

4.复合查询:

  4.1 postman请求: POST   localhost:8080/query/book/novel

     点击send发送请求

   得到响应数据

[
{
"word_count": 1000,
"author": "晓明修改",
"title": "标题",
"publish_date": 1503590400000
}
]

4.2 idea控制台打印信息

{
"from": 0,
"size": 10,
"query": {
"bool": {
"must": [
{
"match": {
"author": {
"query": "晓明",
"operator": "OR",
"prefix_length": 0,
"max_expansions": 50,
"fuzzy_transpositions": true,
"lenient": false,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"boost": 1
}
}
},
{
"match": {
"title": {
"query": "标题",
"operator": "OR",
"prefix_length": 0,
"max_expansions": 50,
"fuzzy_transpositions": true,
"lenient": false,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"boost": 1
}
}
}
],
"filter": [
{
"range": {
"word_count": {
"from": 0,
"to": 2000,
"include_lower": true,
"include_upper": true,
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
}
}

ElasticSearch入门3: Spring Boot集成ElasticSearch的更多相关文章

  1. Kafka 入门和 Spring Boot 集成

    目录 Kafka 入门和 Spring Boot 集成 标签:博客 概述 应用场景 基本概念 基本结构 和Spring Boot 集成 集成概述 集成环境 kafka 环境搭建 Spring Boot ...

  2. Spring Boot 集成 Elasticsearch 实战

    最近有读者问我能不能写下如何使用 Spring Boot 开发 Elasticsearch(以下简称 ES) 相关应用,今天就讲解下如何使用 Spring Boot 结合 ES. 可以在 ES 官方文 ...

  3. Elasticsearch学习(3) spring boot整合Elasticsearch的原生方式

    前面我们已经介绍了spring boot整合Elasticsearch的jpa方式,这种方式虽然简便,但是依旧无法解决我们较为复杂的业务,所以原生的实现方式学习能够解决这些问题,而原生的学习方式也是E ...

  4. Elasticsearch学习(4) spring boot整合Elasticsearch的聚合操作

    之前已将spring boot原生方式介绍了,接下将结介绍的是Elasticsearch聚合操作.聚合操作一般来说是解决一下复杂的业务,比如mysql中的求和和分组,由于博主踩的坑比较多,所以博客可能 ...

  5. Elasticsearch学习(1) Spring boot整合Elasticsearch

    本文的Spring Boot版本为1.5.9,Elasticsearch版本为2.4.4,话不多说,直接上代码. 一.启动Elasticsearch 在官网上下载Elasticsearch后,打开bi ...

  6. spring boot与ElasticSearch的集成

    本文主要介绍Spring boot与ElasticSearch的集成,因为Spring boot的教程以及ElasticSearch的学习其他博客可能更优秀,所以建议再看这篇文章前先学习学习一下Spr ...

  7. ElasticSearch与Spring Boot集成问题

    1.None of the configured nodes are available 或者 org.elasticsearch.transport.RemoteTransportException ...

  8. Spring Boot整合Elasticsearch

    Spring Boot整合Elasticsearch   Elasticsearch是一个全文搜索引擎,专门用于处理大型数据集.根据描述,自然而然使用它来存储和搜索应用程序日志.与Logstash和K ...

  9. spring boot 整合 elasticsearch 5.x

    spring boot与elasticsearch集成有两种方式.一种是直接使用elasticsearch.一种是使用data中间件. 本文只指针使用maven集成elasticsearch 5.x, ...

随机推荐

  1. s5-12 RIP

    什么是RIP? RIP:Routing information protocol,路由选择信息协议 1988年,RFC1058 RIPv1:有类的路由选择协议 RIPv2:无类的路由选择协议,支持CI ...

  2. vue中的静态路由

    单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面 ...

  3. jq,ajax,post例子。

    jq post 例子 <script> $(function(){ $('#button').on('click', function(){ $.ajax({ type: 'POST', ...

  4. 高性能高可用的分布式唯一ID服务——mooon-uniq-id

    目录 目录 1 1. 前言 1 2. 名词 1 3. 功能 1 4. 唯一性原理 2 5. 系统结构 2 5.1. mooon-uniq-agent 2 5.2. mooon-uniq-master ...

  5. 软工网络15团队作业4——Alpha阶段敏捷冲刺(一)

    第 1 篇 Scrum 冲刺: 各个成员在 Alpha 阶段认领的任务 成员      任务 预期任务量/小时 曾艺佳 学习模块:单词及其释义      单词发音     例句学习     添加笔记 ...

  6. mysql_触发器

    mysql触发器 触发器:trigger,事先为某张表绑定好一段代码,当表中某些内容发生改变的时候(增删改),系统会自动触发代码,执行 触发器:事件类型,触发时间,触发对象 事件类型:增删改,三种类型 ...

  7. Codeforces816B Karen and Coffee 2017-06-27 15:18 39人阅读 评论(0) 收藏

    B. Karen and Coffee time limit per test 2.5 seconds memory limit per test 512 megabytes input standa ...

  8. excel冻结窗格

    编辑excel时冻结窗格可以大大增加可读性.每个sheet都应该加上. 第一份工作的时候,上司比较严格,还因为这个挨过几次骂.所以这个技巧大家一定要掌握 方法很简单: 选中首行:视图 -- 冻结窗格 ...

  9. Python 中的深拷贝和浅拷贝

    一.浅拷贝python中 对象赋值时 默认是浅拷贝,满足如下规律:1. 对于 不可变对象(字符串,元组 等),赋值 实际上是创建一个新的对象:例如: >>> person=['nam ...

  10. 针对 easyui boolean 布尔值 的处理

    1.html代码 <select class="easyui-combobox" data-options="editable:false,panelHeight: ...