一:什么是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这个搜索引擎会这么快????

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

技术
©2019-2020 Toolsou All rights reserved,
ajax get请求中文参数乱码解决C#/.NET 系统优化专题(redis第六篇 数据结构【List】)Element-UI二次封装实现TreeSelect 树形下拉选择组件华为鸿蒙操作系统有哪些特点和优势?余承东《全场景时代 新体验与新生态》演讲全文【Python】读取txt文件,获取指定行中指定位置数据el-ui:select获取值PostgreSQL: 九. 索引element-ui的el-date-picker组件获取值(精华)2020年6月26日 C#类库 文件读写操作帮助类Go语言 数组初始化和基本操作