最近学习的DATA URIS

本文详细介绍了URI的概念,包括其数据格式和在线转换方式。探讨了URI在不同浏览器中的支持情况,并分析了其在性能上的优缺点,如减少HTTP请求数、降低带宽等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.URI是什么?

URI是uniform resource locator的简写,是一系列如何获得数据的协议。在一般的情况下,如果我们需要在HTML页面加入一个链接资源,如CSS、JavaScript文件或一个Image文件,其URL属性会告诉游览器去哪里下载这些文件,然后游览器会请求链接,然后下载这些文件。

为什么要说URL呢?不但是它们很像(我第一眼就把URI看成URL了),而且URL其实也是一种URI,URI是一种通过一定的信息来获得资源的协议,当这种信息为一个URL地址时,URI就表现为URL,但是今天讨论的主要不是这些。

 

2.怎么用?

URI的数据格式很简单,通过RFC 2397的定义,一般格式是:

data:[<mime type>][;charset=<charset>][;base64],<encoded data>

 

说明:data - 指代URI协议

        mime type - 代表数据类型,如png图片则为image/png,若不说明,默认为text/plain

        charset - 如果不使用base64,则使用charset指定的字符类(有关base64的信息:http://en.wikipedia.org/wiki/Base64)

        encoded data - 对应的编码信息

 

示例:12K JPG图片

<img src="https://img-blog.csdnimg.cn/2022010703010014709.pjpeg" alt="180.jpg"/>

 

URI data在线转换地址:http://www.abluestar.com/utilities/encode_base64/index.php

 

3.浏览器支持

   Firefox 2+

   Opera 7.2+(数据不能长于4100 characters)

   Chrome (所有版本)

   Safari (所有版本)

   Internet Explorer 8+(数据必须小于32k)

 

4.我们关注的性能(来自秦歌)

       优点:

       1.减少HTTP请求数,没有了TCP连接消耗和同一域名下浏览器的并发数限制。

       2.对于小文件会降低带宽。虽然编码后数据量会增加,但是却减少了http头,当http头的数据量大于文件编码的增量,

          那么就会降低带宽。

       3.对于HTTPS站点,HTTPS和HTTP混用会有安全提示,而HTTPS相对于HTTP来讲开销要大更多,所以Data URI在

          这方面的优势更明显。

       4.可以把整个多媒体页面保存为一个文件。

       缺点:

      1.无法被重复利用,同一个文档应用多次同一个内容,则需要重复多次,数据量大量增加,增加了下载时间。

      2.无法被独自缓存,所以其包含文档重新加载时,它也要重新加载。

      3.客户端需要重新解码和显示,增加了点消耗。

      4.不支持数据压缩,base64编码会增加1/3大小,而urlencode后数据量会增加更多。

      5.不利于安全软件的过滤,同时也存在一定的安全隐患。

转载于:https://www.cnblogs.com/return/archive/2009/11/23/1608956.html

<think>好的,用户想学习Spring Data Elasticsearch,并希望入门教程包括增删改查操作。首先,我需要考虑用户可能的背景。他们可能已经有一定的Spring Boot基础,但对Elasticsearch和Spring Data的整合不太熟悉。因此,我需要从基础的环境搭建开始,确保他们能够顺利配置项目。 接下来,用户的需求是增删改查,这是最基本的操作。我应该先介绍必要的依赖配置,比如在pom.xml中添加Spring Data Elasticsearch和Elasticsearch客户端的依赖。同时,提醒用户注意版本兼容性,这是常见的问题点,避免他们在这里卡住。 然后,需要引导用户配置Elasticsearch的连接信息,比如主机和端口。这里可能需要解释一下Elasticsearch的默认配置,以及如何根据实际环境调整。用户可能不知道application.properties中的配置项,所以要详细说明。 接下来是实体类的创建,使用@Document注解,并解释各个字段的映射。这里需要展示如何用注解配置索引名称、类型以及字段的映射方式。用户可能对Elasticsearch的映射不太熟悉,所以需要简单说明,比如keyword和text的区别。 然后是Repository接口,继承ElasticsearchRepository,说明基本的CRUD方法已经由框架提供。用户可能对Spring Data的Repository模式不太熟悉,所以需要强调接口的定义方式,以及如何通过方法名衍生查询。 在增删改查的具体实现部分,需要分步骤讲解每个操作,比如保存文档、查询所有、条件查询、更新和删除。同时,要提到自定义查询方法的使用,比如使用@Query注解编写DSL语句,或者通过方法名自动生成查询。这里可能需要给出示例,帮助用户理解如何扩展功能。 最后,确保用户能够运行和测试代码,建议使用Postman或curl进行接口测试,并检查Elasticsearch中的数据变化。可能还需要提醒常见的错误,比如版本不匹配导致的启动问题,或者字段映射不正确引发的查询异常。 总结时,要鼓励用户动手实践,并指出进一步学习的资源,比如官方文档和社区教程。同时,提醒他们关注日志,以便排查问题。整个过程需要循序渐进,避免信息过载,确保每个步骤都清晰易懂。</think>好的!以下是一个入门Spring Data Elasticsearch的教程,包含环境搭建、实体映射和基础CRUD操作(增删改查): --- ### 一、环境准备 #### 1. 添加依赖(pom.xml) ```xml <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <!-- Elasticsearch客户端(版本需与ES服务端一致) --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.17.5</version> </dependency> ``` #### 2. 配置文件(application.yml) ```yaml spring: elasticsearch: rest: uris: http://localhost:9200 # ES服务地址 username: "" # 如果有安全认证 password: "" ``` --- ### 二、实体类映射 ```java @Document(indexName = "user_index") // 指定ES索引名称 public class User { @Id private String id; @Field(type = FieldType.Keyword) // keyword类型(不分词) private String name; @Field(type = FieldType.Integer) private Integer age; @Field(type = FieldType.Text) // text类型(分词) private String description; // 省略构造方法/getter/setter } ``` --- ### 三、Repository接口 ```java public interface UserRepository extends ElasticsearchRepository<User, String> { // 继承后已包含基础CRUD方法 // 自定义方法示例: List<User> findByName(String name); } ``` --- ### 四、基础CRUD操作 #### 1. 插入数据(Create) ```java @Autowired private UserRepository userRepository; public void addUser() { User user = new User(); user.setName("张三"); user.setAge(25); user.setDescription("Java开发者"); userRepository.save(user); // 自动生成ID } ``` #### 2. 查询所有(Read) ```java public List<User> getAllUsers() { Iterable<User> users = userRepository.findAll(); return StreamSupport.stream(users.spliterator(), false) .collect(Collectors.toList()); } ``` #### 3. 条件查询(自定义查询) ```java // 通过方法名自动生成查询 public List<User> findByName(String name) { return userRepository.findByName(name); } // 使用@Query注解自定义DSL @Query("{\"match\": {\"description\": \"?0\"}}") List<User> findByDescription(String keyword); ``` #### 4. 更新数据(Update) ```java public void updateUser(User user) { if (userRepository.existsById(user.getId())) { userRepository.save(user); // 根据ID覆盖原有文档 } } ``` #### 5. 删除数据(Delete) ```java public void deleteUser(String id) { userRepository.deleteById(id); } ``` --- ### 五、运行与验证 1. 启动Elasticsearch服务(本地或远程) 2. 启动Spring Boot应用 3. 使用`curl`或Postman测试接口: ```bash # 查看索引是否创建成功 curl -X GET "localhost:9200/_cat/indices?v" # 查询所有文档 curl -X GET "localhost:9200/user_index/_search" ``` --- ### 六、注意事项 1. **版本兼容性**:Spring Data Elasticsearch版本需要与Elasticsearch服务端版本匹配 2. **映射更新**:已存在的索引字段类型无法修改,需重建索引 3. **复杂查询**:推荐使用`RestHighLevelClient`或`ElasticsearchOperations`进行复杂DSL查询 4. **日志排查**:开启调试日志可查看生成的DSL语句: ```yaml logging: level: org.springframework.data.elasticsearch: DEBUG ``` 下一步建议学习:分页查询、聚合统计、高亮显示等高级功能。官方文档是最佳参考资料:https://spring.io/projects/spring-data-elasticsearch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值