赞
踩
索引(indices)--------------------------------Databases 数据库 类型(type)-----------------------------Table 数据表 文档(Document)----------------Row 行 字段(Field)-------------------Columns 列
Elasticsearch中支持的数据类型非常丰富:
几个关键常用的:
String类型,又分两种:
text:可分词,不可参与聚合
keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
Numerical:数值类型,分两类
需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
基本数据类型:long、interger、short、byte、double、float、half_float
浮点数的高精度类型:scaled_float
Date:日期类型
elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
Elasticsearch集群相关概念:
索引集(Indices,index的复数):逻辑上的完整索引 collection1
分片(shard):数据拆分后的各个部分
副本(replica):每个分片的复制
要注意的是:Elasticsearch本身就是分布式的,因此即便你只有一个节点,Elasticsearch默认也会对你的数据进行分片和副本操作,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡。
Es的增删改查
使用kibana的控制台操作,可以对http请求进行简化 1. 创建索引和映射关系PUT /索引库名/_mapping/类型名称{ "properties": { "字段名": { "type": "类型", "index": true, "store": true, "analyzer": "分词器" } }}
类型名称:就是前面type的概念,类似于数据库中的不同表字段名:任意填写,可以指定许多属性,例如:
type:类型,可以是text、long、short、date、integer、object等
index:是否索引,默认为true
store:是否存储,默认为false
analyzer:分词器,这里的ik_max_word即使用ik分词器
demo:
查看映射关系
GET /索引库名/_mapping
2.新增数据
POST /索引库名/类型名/id值 ##id值可以自己指定,也可以由es自动生成{ "key":"value"}
demo:
查看刚刚插入的数据:
get _search{ "query":{ "match_all":{} }}
3.修改数据 把刚才新增的请求方式改为PUT,就是修改了。不过修改必须指定id
id对应文档存在,则修改
id对应文档不存在,则新增
PUT /majiang/user/1{ "name":"diku", "age":19, "images":"http://image.majiang.com/diku.jpg"}
4.删除数据
DELETE /索引库名/类型名/id值
5.查询数据
5.1查询所有
GET /majiang/_search{ "query":{ //查询对象 "match_all": {} //代表查询所有 }}
5.2匹配查询
GET /majiang/_search{ "query":{ "match":{ "age":19 } }}
结果:
更多相关高级的操作体验请上官方开发文档https://www.elastic.co/guide/index.html
与Springboot的整合
1.添加pom依赖
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency><dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-data-elasticsearchartifactId>dependency><dependency> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> <optional>trueoptional>dependency><dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-testartifactId>dependency>
2.配置application.yml文件
server: port: 8080spring: data: elasticsearch: cluster-name: elasticsearch cluster-nodes: 192.168.9.120:9300
3.创建启动器
@SpringBootApplicationpublic class EsApp { public static void main(String[] args) { SpringApplication.run(EsApp.class,args); }}
4.创建实体类User
@Data@Document(indexName = "majiang" ,type="user")public class User { private String id; private String name; private int age; private String images; public User() { } public User(String id, String name, int age, String images) { this.id = id; this.name = name; this.age = age; this.images = images; }}
5.创建EsRepository
@Repositorypublic interface EsRepository extends ElasticsearchRepository<User,String> {}
为了简化操作就没有创建controller、serviceImpl等,通过@SpringBootTest进行演示操作。
6.UserService具体操作
通过ElasticsearchTemplate 和ElasticsearchRepository 来操作。
@RunWith(SpringRunner.class)@SpringBootTestpublic class UserService { private static final Logger log = LoggerFactory.getLogger(UserService.class); @Autowired private ElasticsearchTemplate elasticsearchTemplate; @Autowired private EsRepository esRepository; /** * 查询所有 */ @Test public void getAll() { esRepository.findAll().forEach(a -> { log.info(String.valueOf(a)); }); //使用elasticsearchTemplate 构造NativeSearchQueryBuilder对象 SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(null).build(); List users = elasticsearchTemplate.queryForList(searchQuery, User.class); users.forEach(user -> { log.info(user.toString()); } ); } /** * 通过id查询 */ @Test public void findById() { log.info(String.valueOf(esRepository.findById("1"))); } /** * 新增 */ @Test public void insUser() { esRepository.save(new User("6", "cccc", 26, "http://image.majiang.com/cccc.jpg")); //使用elasticsearchTemplate 构造IndexQuery对象 User cccc = new User("8", "oooo", 29, "http://image.majiang.com/oooo.jpg"); IndexQuery indexQuery = new IndexQueryBuilder().withObject(cccc).build(); elasticsearchTemplate.index(indexQuery); } /** * 修改 */ @Test public void updUser() { esRepository.save(new User("6", "cccc", 29, "http://image.majiang.com/cccc.jpg")); } /** * 删除 */ @Test public void delUser() { esRepository.deleteById("6"); }}
查询所有getAll()的执行结果
总结
本篇简单介绍了Elasticsearch的基本操作,Spring boot整合Es的两种方式ElasticsearchTemplate,ElasticsearchRepository。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。