Spring boot中使用ElasticSearch的方法详解

网友投稿 337 2023-01-15


Spring boot中使用ElasticSearch的方法详解

0.版本选择

我这里选择了5.6.x,记得如果spring-boot-starter-parent是1.x可以选择2.x版本的elasticsearch,版本要对应,不然会有莫名其妙的问题

1.安装ElasticSearch

https://elastic.co/downloads/past-releases

windows 测试的,解压就能用

解压,到bin目录,双击elasticsearch.bat

1.1安装elasticsearch-head

https://github.com/mobz/elasticsearch-head

elasticsearch-head是一个网页查看elasticsearch状态,操作的第三方东西

git clone git://github.com/mobz/elasticsearch-head.git

cd elasticsearch-head

npm install

npm run start

open http://localhost:9100/

要先安装node.js

config/elasticsearch.yml 文件增加

http.cors.enabled: true

http.cors.allow-origin: “*”

elasticsearch-head/Gruntfile.js

connect: {

server: {

options: {

hostname: '0.0.0.0',

port: 9100,

base: '.',

keepalive: true

}

}

}

8082改成你自己的端口

http://127.0.0.1:8082/swagger-ui.html#/

0是第一页

application.properties

#===es start===

spring.data.elasticsearch.repositories.enabled = true

spring.data.elasticsearch.cluster-nodes = 127.0.0.1:9300

#===es end===

2.porm

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.1.1.RELEASE

com.example

demo

0.0.1-SNAPSHOT

demo

Demo project for Spring Boot

jar

1.8

io.springfox

springfox-swagger2

2.6.1

io.springfox

springfox-swagger-ui

2.6.1

org.springframework.boot

spring-boot-starter-data-elasticsearch

<groupId>org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-maven-plugin

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.1.1.RELEASE

com.example

demo

0.0.1-SNAPSHOT

demo

Demo project for Spring Boot

jar

1.8

io.springfox

springfox-swagger2

2.6.1

io.springfox

springfox-swagger-ui

2.6.1

org.springframework.boot

spring-boot-starter-data-elasticsearch

<groupId>org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-maven-plugin

主要添加spring-boot-starter-data-elasticsearch,注意spring-boot-starter-parent的版本号

3. GoodsInfo

package com.example.demo.domain;

import org.springframework.data.elasticsearch.annotations.Document;

import java.io.Serializable;

@Document(indexName = "testgoods", type = "goods")

public class GoodsInfo implements Serializable {

private Long id;

private String name;

private String description;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public GoodsInfo(Long id, String name, String description) {

this.id = id;

this.name = name;

this.description = description;

}

public GoodsInfo() {

}

}

indexName 类似数据库名称,type类似表名字

4. GoodsRepository

package com.example.demo.repository;

import com.example.demo.domain.GoodsInfo;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import org.springframework.stereotype.Component;

@Component

public interface GoodsRepository extends ElasticsearchRepository {

}

这里会帮你封装了很多了

5. HelloWorldController

http://

package com.example.demo.controller;

import com.example.demo.domain.GoodsInfo;

import com.example.demo.repository.GoodsRepository;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiImplicitParam;

import io.swagger.annotations.ApiOperation;

import org.elasticsearch.index.query.QueryBuilder;

import org.elasticsearch.index.query.QueryBuilders;

import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.domain.Page;

import org.springframework.data.domain.PageRequest;

import org.springframework.data.domain.Pageable;

import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;

import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;

import org.springframework.data.elasticsearch.cohttp://re.query.SearchQuery;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.*;

import java.util.List;

import java.util.Optional;

imphttp://ort static org.elasticsearch.index.query.QueryBuilders.queryStringQuery;

@Controller

@Api(value = "HelloWorldController|一个用来测试swagger注解的控制器",tags = "HelloWorldController", description = "HelloWorldController")

public class HelloWorldController {

@Autowired

private GoodsRepository goodsRepository;

@ResponseBody

@RequestMapping(value = "/hello", method = RequestMethod.GET)

@ApiOperation(value = "根据用户编号获取用户姓名", notes = "test: 仅1和2有正确返回")

@ApiImplicitParam(paramType="query", name = "userNumber", value = "用户编号", required = true, dataType = "Integer")

public String index(@RequestParam Integer userNumber){

if(userNumber == 1){

return "小白";

}

else if(userNumber == 2){

return "小红";

}

else{

return "未知";

}

}

@ResponseBody

@RequestMapping(value = "/save", method = RequestMethod.POST)

@ApiOperation(value = "新增商品")

public String save(){

GoodsInfo goodsInfo = new GoodsInfo(System.currentTimeMillis(), "商品" + System.currentTimeMillis(), "这是一个测试商品");

goodsRepository.save(goodsInfo);

return "success";

}

@ResponseBody

@RequestMapping(value = "/delete", method = RequestMethod.POST)

@ApiOperation(value = "删除商品")

@ApiImplicitParam(paramType="query", name = "id", value = "商品id", required = true, dataType = "long")

public String delete(@RequestParam(required = true) long id){

goodsRepository.deleteById(id);

return "success";

}

@ResponseBody

@RequestMapping(value = "/update", method = RequestMethod.POST)

@ApiOperation(value = "更新商品")

@ApiImplicitParam(paramType="query", name = "id", value = "商品id", required = true, dataType = "long")

public String update(@RequestParam(required = true) long id,

@RequestParam(required = false) String name,

@RequestParam(required = false) String description){

Optional goodsInfo = goodsRepository.findById(id);

if(goodsInfo.isPresent()){

if(name != null){

goodsInfo.get().setName(name);

}

if(description != null){

goodsInfo.get().setDescription(description);

}

goodsRepository.save(goodsInfo.get());

return "success";

}else{

return "no find";

}

}

@ResponseBody

@RequestMapping(value = "/getOne", method = RequestMethod.GET)

@ApiOperation(value = "得到一个商品")

@ApiImplicitParam(paramType="query", name = "id", value = "商品id", required = true, dataType = "long")

public Optional getOne(@RequestParam(required = true) long id){

Optional goodsInfo = goodsRepository.findById(id);

return goodsInfo;

}

private SearchQuery getEntitySearchQuery(int pageNumber, String searchContent){

Pageable pageable = PageRequest.of(pageNumber, 20);

SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(queryStringQuery(searchContent)).withPageable(pageable).build();

return searchQuery;

}

@ResponseBody

@RequestMapping(value = "/search", method = RequestMethod.GET)

@ApiOperation(value = "搜索商品")

public List search(@RequestParam(required = true) Integer pageNumber, @RequestParam(required = true) String query){

SearchQuery searchQuery = getEntitySearchQuery(pageNumber, query);

Page goodsPage = goodsRepository.search(searchQuery);

return goodsPage.getContent();

}

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:研发管理平台流程设计图(研发项目管理流程图)
下一篇:java实现微信支付结果通知
相关文章

 发表评论

暂时没有评论,来抢沙发吧~