elasticsearch 数据类型_Elasticsearch的基本使用

前期我们已经介绍了Es的安装,本期将介绍Es的基本概念,与spring boot的整合使用。 简介 Elasticsearch是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似。对比关系如下:
索引(indices)--------------------------------Databases 数据库  类型(type)-----------------------------Table 数据表    文档(Document)----------------Row 行      字段(Field)-------------------Columns 列 

Elasticsearch中支持的数据类型非常丰富:

e9b8661de1064fd4e0a6294929cd1744.png

几个关键常用的:

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

4f38601450f76ee7207825051b2e958f.png查看映射关系

GET /索引库名/_mapping
2.新增数据
POST /索引库名/类型名/id值      ##id值可以自己指定,也可以由es自动生成{    "key":"value"}
demo:

3dbd7cae27eef8455f7d313739efcb95.png

查看刚刚插入的数据:
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值

55970eed001bf9dc63d3132cb5919461.png

5.查询数据

    5.1查询所有

GET /majiang/_search{    "query":{  //查询对象        "match_all": {}   //代表查询所有    }}

    5.2匹配查询

GET /majiang/_search{    "query":{        "match":{            "age":19        }    }}

        结果:

50cc27d359085dfa7077b98727889650.png

  • 更多相关高级的操作体验请上官方开发文档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()的执行结果

c1ac85392691d20b846c35e902fcce08.png

总结

本篇简单介绍了Elasticsearch的基本操作,Spring boot整合Es的两种方式ElasticsearchTemplate,ElasticsearchRepository。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值