添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<name>springBoot</name>
<description>springBoot</description>
<groupId>org.example</groupId>
<artifactId>springBoot</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<lombok.version>1.18.12</lombok.version>
<org.apache.tomcat.tomcat-jdbc.version>8.5.21</org.apache.tomcat.tomcat-jdbc.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-->修复log4j<-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-dbcp -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>8.5.43</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>${org.apache.tomcat.tomcat-jdbc.version}</version>
</dependency>
</dependencies>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.6.2</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version> <!-- or newer version -->
<configuration>
<source>1.8</source> <!-- depending on your project -->
<target>1.8</target> <!-- depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<!-- other annotation processors -->
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>*.**</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<useUniqueVersions>false</useUniqueVersions>
<mainClass>es.com.DmpApplication</mainClass>
</manifest>
<manifestEntries>
<Class-Path>./resources/</Class-Path>
</manifestEntries>
</archive>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<outputDirectory>${project.build.directory}/resources</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includes>
<include>
<groupId>null</groupId>
<artifactId>null</artifactId>
</include>
</includes>
<layout>ZIP</layout>
<addResources>true</addResources>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.2</version>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>8.41</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>checkstyle</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
<configuration>
<skip>false</skip>
<failOnViolation>true</failOnViolation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<configLocation>others/tencent_checks.xml</configLocation>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>alimaven-central</id>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>jboss-public-repository-group</id>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>mirrorId</id>
<url>http://mirrors.tencent.com/nexus/repository/maven-public</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
添加application.properties 配置文件
spring.application.name=S
server.port=18001
server.tomcat.uri-encoding=UTF-8
spring.elasticsearch.rest.uris=*******:9200
添加es配置文件类
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
@Configuration
public class EsClientConfig {
@Value("${spring.elasticsearch.rest.uris}")
private String host;
@Bean
RestHighLevelClient restHighLevelClient() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(host) // es的http连接地址
.withBasicAuth("root", "root") // 如果开启了用户名密码验证,则需要加上
.build();
return RestClients.create(clientConfiguration).rest();
}
@Bean
ElasticsearchRestTemplate elasticsearchRestTemplate(@Autowired RestHighLevelClient restHighLevelClient) {
return new ElasticsearchRestTemplate(restHighLevelClient);
}
}
添加bean类
import io.micrometer.core.lang.Nullable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
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
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "person", type = "_doc", shards = 1, replicas = 1)
public class BizAction {
@Id
@Nullable
private String id;
@Field(value = "name", type = FieldType.Keyword)
private String name;
@Field(type = FieldType.Keyword)
private Integer age;
@Override
public String toString() {
return "bizAction{" +
"id=" + id +
", name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
@Field(type = FieldType.Integer)
private Integer age;
@Nullable @Field(name = "birth-date", type = FieldType.Date, format = DateFormat.basic_date)
private LocalDate birthDate;
@Field(type = FieldType.Boolean)
private Boolean isDeleted;
@Field(type = FieldType.Date, format = DateFormat.basic_date)
private LocalDate createTime;
@Field(type = FieldType.Date, format = DateFormat.basic_date)
private LocalDate updateTime;
}
添加controller
package es.com.controller;
import es.com.orm.BizAction;
import es.com.common.ApiResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/dmp/api/estest")
public class ESController {
private static final Logger logger = LoggerFactory.getLogger(ESController.class);
@Autowired
es.com.service.ESService ESService;
@PostMapping("/create")
public ApiResponse queryPortraitUin(@RequestBody BizAction person) {
String personById = ESService.createPerson(person);
System.out.println(personById.toString());
return ApiResponse.OK(personById);
}
@PostMapping("/query")
public ApiResponse queryPortrait(@RequestBody BizAction person) {
BizAction personById = ESService.getPersonById("1");
// System.out.println(personById.toString());
return ApiResponse.OK(personById);
}
}
添加service
package es.com.service;
import es.com.orm.BizAction;
import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.query.*;
import org.springframework.stereotype.Service;
import java.util.Iterator;
@Service
public class ESService {
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
// @Autowired
// private BizActionRepository repository;
// 根据id查询一条文档
public BizAction getPersonById(String id) {
System.out.println(id);
// 查看当前索引是否存在
boolean b = elasticsearchRestTemplate.indexExists(BizAction.class);
// 根据document id 查询文档
BizAction bizAction = elasticsearchRestTemplate.queryForObject(GetQuery.getById(id), BizAction.class);
// 根据document id 分页查询文档
MatchQueryBuilder builder = QueryBuilders.matchQuery("id", "1");
SearchQuery searchQuery = new NativeSearchQuery(builder).setPageable(PageRequest.of(0, 100));
AggregatedPage<BizAction> page = elasticsearchRestTemplate.queryForPage(searchQuery, BizAction.class);
long totalElements = page.getTotalElements(); // 总记录数
int totalPages = page.getTotalPages(); // 总页数
int pageNumber = page.getPageable().getPageNumber(); // 当前页号
Iterator<BizAction> iterator = page.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toString());
}
System.out.println(totalElements);
return bizAction;
}
// 新增一条文档
public String createPerson(BizAction person) {
IndexQuery indexQuery = new IndexQueryBuilder()
.withId(person.getId())
.withObject(person)
.withType("_doc")
.build();
String documentId = elasticsearchRestTemplate.index(indexQuery);
return documentId;
}
// 高级查询
public String getDocument() {
/**
* 高级查询
*/
MatchQueryBuilder lastUpdateUser = QueryBuilders.matchQuery("person", "1");
MatchQueryBuilder deleteflag = QueryBuilders.matchQuery("name", "lss");
//创建bool多条件查询
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder mustQuery = boolQueryBuilder.must(lastUpdateUser).must(deleteflag);
//嵌套索引,需要使用nest查询
mustQuery.must(QueryBuilders.nestedQuery("entityNodes", QueryBuilders.termQuery("entityNodes.node_type", ""), ScoreMode.None));
//可以使用should查询,不是必需条件
BoolQueryBuilder nodeQueryBuilder = QueryBuilders.boolQuery();
nodeQueryBuilder.should(QueryBuilders.nestedQuery("entityNodes", QueryBuilders.wildcardQuery("entityNodes.parent_ids", "*," + "11" + "*"), ScoreMode.None));
nodeQueryBuilder.should();
mustQuery.must(nodeQueryBuilder);
//查询使用排序
SortBuilder order = new FieldSortBuilder("lastUpdateTime").order(SortOrder.DESC);
//可以使用高亮显示,就是html标签
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("<span class='highlighted'>")
.postTags("</span>")
.field("paperBaseName");//哪个字段高亮
//使用分页查询
SearchQuery nativeSearchQueryBuilder = new NativeSearchQueryBuilder()
.withQuery(mustQuery).withSort(order).withHighlightBuilder(highlightBuilder)
.withPageable(PageRequest.of(0, 100)).build();
//进行查询,entityMapper使用默认的也可,EsPaperBase.class是需要自己映射的查询类
SearchHits<PortraitEyaoBo> search = elasticsearchRestTemplate.search(nativeSearchQueryBuilder, PortraitEyaoBo.class);
List<SearchHit<PortraitEyaoBo>> searchHits = search.getSearchHits();
ArrayList<Object> array = new ArrayList<>();
for (SearchHit<PortraitEyaoBo> searchHit : searchHits) {
array.add(searchHit.getContent());
}
return "";
}
}
资源: https://download.youkuaiyun.com/download/weixin_49761581/76848339