Spring Boot 集成 elasticsearch

一:什么是elasticsearch,elasticsearch在内存中怎样的结构

elasticsearch是一款基于全文搜索引擎 Apache Lucene进行封装的搜索引擎,它可以用于全文搜索,结构化搜索以及分析。

elasticsearch在内存中结构:

数据在内存中是这种的形式存在,索引相当于数据库,文档相当于表,文档id属性唯一。最后会指定域中某对json来进行关键字的生成,并将生成的词汇传给索引(index)组件。

二:怎么集成

一:添加依赖

        	<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>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>

ok!!第一个问题出现了,版本问题

pringboot 有一个 spring data 组件,可以用来连接各种数据源。 用来连接 elasticsearch 的是 spring-data-elasticsearch。 
spring-data-elasticsearch 更新比较慢,其最高版本的 elasticsearch的6.x 版本。

so,我将版本统一为1.5.9,elasticsearch版本为2.4.2,ki版本为4.6.3

        <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
	</parent>

 OK,又来个问题二,elasticsearch在java客户端的端口为9300,Restful Http的端口为9200,So配置文件application.yml中写入

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

二:创建对象

@Document(indexName = "hello",type = "product")
public class product {
	private int id;
	private String name;
      get.set。。。
}

indexName 为索引的名称,type为文档类型,两者用mysql来进行比喻,index相当于数据库名,type相当于表名

三:定义接口

定义一个proDao接口来实现ElasticsearchRepository<T, Serializable>

T为定义的类,Serializable为Integer

public interface proDao extends ElasticsearchRepository<product, Integer>{

}

这个就像是jpa一样,开箱即食,So,来个Controller搞定

四:书写Controller

@RestController
public class proController {
	@Autowired
	private proDao proDao;
	@GetMapping("/add")
	public void add() {
		product p = new product(1, "墨镜");
		proDao.save(p);
		System.out.println("添加成功!!");
	}
}

写一个添加产品,看一下效果。

五:kibana中看一下

一开始是没有索引的,需要我们自己创建一个。

步骤:Setting-》将iIndex contains time-based events的√取消-》输入你的索引名称-》create

最后点击Discover,你就可以看到了

 完整的controller,controller里面有两个问题:一:没有query查询的方法,二:getAll()方法返回之后无法解析为json

同swagger测试,其他一些正常。

@RestController
public class proController {
	@Autowired
	private proDao proDao;
	@GetMapping("/add")
	public Object add(@RequestParam("id")int id,@RequestParam("name")String name) {
		product p = new product(id,name);
		proDao.save(p);
		return p;
	}
	@GetMapping("/delete/{id}")
	public Object del(@PathVariable("id")int id) {
		product p = proDao.findOne(id);
		proDao.delete(id);
		return p;
	}
	
	@GetMapping("/update")
	public Object update(@RequestParam("id")int id,@RequestParam("name")String name) {
		product p = new product(id, name);
		proDao.save(p);
		return p;
	}
	
	@GetMapping("/getone/{id}")
	public Object getone(@PathVariable("id")int id) {
		product p = proDao.findOne(id);
		return p ;
	}
	
	@GetMapping("/getAll")
	public Object getAll() {
		Iterable<product> all = proDao.findAll();
		for (product product : all) {
			System.out.println(product);
		}
		return all;
	}
}

swagger界面

 其实,最后应该有一个问题,为什么elasticsearch这个搜索引擎会这么快????

哈哈,我也在研究中!!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值