当前位置:

首页 > 编程开发 > SpringBoot+Elasticsearch如何实现数据搜索

SpringBoot+Elasticsearch如何实现数据搜索

一、简介SpringBoot连接ElasticSearch,主流的方式有以下四种方式方式一:通过ElasticTransportClient客户端连接es服务器,底层基于TCP协议通过transport模块和远程ES服务端通信,不过,从V7.0开始官方不建议使用,V8.0开始正式移除。方式二:通过ElasticJavaLowLevelRestClient客户端连接es服务器,底层基于HTTP协议通过restfulAPI来和远程ES服务端通信,只提供了最简单最基本的API,类似于上篇文章中给大家介绍的API

本文目录

      一、简介

      SpringBoot 连接 ElasticSearch,主流的方式有以下四种方式

      • 方式一:通过Elastic Transport Client客户端连接 es 服务器,底层基于 TCP 协议通过 transport 模块和远程 ES 服务端通信,不过,从 V7.0 开始官方不建议使用,V8.0开始正式移除。

      • 方式二:通过Elastic Java Low Level Rest Client客户端连接 es 服务器,底层基于 HTTP 协议通过 restful API 来和远程 ES 服务端通信,只提供了最简单最基本的 API,类似于上篇文章中给大家介绍的 API 操作逻辑。

      • 方式三:通过Elastic Java High Level Rest Client客户端连接 es 服务器,底层基于Elastic Java Low Level Rest Client客户端做了一层封装,提供了更高级得 API 且和Elastic Transport Client接口及参数保持一致,官方推荐的 es 客户端。

      • 方式四:通过JestClient客户端连接 es 服务器,这是开源社区基于 HTTP 协议开发的一款 es 客户端,官方宣称接口及代码设计比 ES 官方提供的 Rest 客户端更简洁、更合理,更好用,具有一定的 ES 服务端版本兼容性,但是更新速度不是很快,目前 ES 版本已经出到 V7.9,但是JestClient只支持 V1.0~V6.X 版 本的 ES。

      还有一个需要大家注意的地方,那就是版本号的兼容!

      在开发过程中,大家尤其需要关注一下客户端和服务端的版本号,要尽可能保持一致,比如服务端 es 的版本号是6.8.2,那么连接 es 的客户端版本号,最好也是6.8.2,即使因项目的原因不能保持一致,客户端的版本号必须在6.0.0 ~6.8.2,不要超过服务器的版本号,这样客户端才能保持正常工作,否则会出现很多意想不到的问题,假如客户端是7.0.4的版本号,此时的程序会各种报错,甚至没办法用!

      为什么要这样做呢?主要原因就是 es 的服务端,高版本不兼容低版本;es6 和 es7 的某些 API 请求参数结构有着很大的区别,所以客户端和服务端版本号尽量保持一致。

      废话也不多说了,直接上代码!

      二、代码实践

      本文采用的SpringBoot版本号是2.1.0.RELEASE,服务端 es 的版本号是6.8.2,客户端采用的是官方推荐的Elastic Java High Level Rest Client版本号是6.4.2,方便与SpringBoot的版本兼容。

      2.1、导入依赖

      
      
          org.elasticsearch
          elasticsearch
          6.4.2
      
      
          org.elasticsearch.client
          elasticsearch-rest-client
          6.4.2
      
      
          org.elasticsearch.client
          elasticsearch-rest-high-level-client
          6.4.2
      

      2.2、配置环境变量

      在application.properties全局配置文件中,配置elasticsearch自定义环境变量。

      elasticsearch.scheme=http
      elasticsearch.address=127.0.0.1:9200
      elasticsearch.userName=
      elasticsearch.userPwd=
      elasticsearch.socketTimeout=5000
      elasticsearch.connectTimeout=5000
      elasticsearch.connectionRequestTimeout=5000

      2.3、创建 elasticsearch 的 config 类

      @Configuration
      public class ElasticsearchConfiguration {
      
          private static final Logger log = LoggerFactory.getLogger(ElasticsearchConfiguration.class);
      
      
          private static final int ADDRESS_LENGTH = 2;
      
          @Value("${elasticsearch.scheme:http}")
          private String scheme;
      
          @Value("${elasticsearch.address}")
          private String address;
      
          @Value("${elasticsearch.userName}")
          private String userName;
      
          @Value("${elasticsearch.userPwd}")
          private String userPwd;
      
          @Value("${elasticsearch.socketTimeout:5000}")
          private Integer socketTimeout;
      
          @Value("${elasticsearch.connectTimeout:5000}")
          private Integer connectTimeout;
      
          @Value("${elasticsearch.connectionRequestTimeout:5000}")
          private Integer connectionRequestTimeout;
      
          /**
           * 初始化客户端
           * @return
           */
          @Bean(name = "restHighLevelClient")
          public RestHighLevelClient restClientBuilder() {
              HttpHost[] hosts = Arrays.stream(address.split(","))
                      .map(this::buildHttpHost)
                      .filter(Objects::nonNull)
                      .toArray(HttpHost[]::new);
              RestClientBuilder restClientBuilder = RestClient.builder(hosts);
              // 异步参数配置
              restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> {
                  httpClientBuilder.setDefaultCredentialsProvider(buildCredentialsProvider());
                  return httpClientBuilder;
              });
      
              // 异步连接延时配置
              restClientBuilder.setRequestConfigCallback(requestConfigBuilder -> {
                  requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeout);
                  requestConfigBuilder.setSocketTimeout(socketTimeout);
                  requestConfigBuilder.setConnectTimeout(connectTimeout);
                  return requestConfigBuilder;
              });
      
              return new RestHighLevelClient(restClientBuilder);
          }
      
      
          /**
           * 根据配置创建HttpHost
           * @param s
           * @return
           */
          private HttpHost buildHttpHost(String s) {
              String[] address = s.split(":");
              if (address.length == ADDRESS_LENGTH) {
                  String ip = address[0];
                  int port = Integer.parseInt(address[1]);
                  return new HttpHost(ip, port, scheme);
              } else {
                  return null;
              }
          }
      
          /**
           * 构建认证服务
           * @return
           */
          private CredentialsProvider buildCredentialsProvider(){
              final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
              credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName,
                      userPwd));
              return credentialsProvider;
          }
      }

      至此,客户端配置完毕,项目启动的时候,会自动注入到Spring的ioc容器里面。

      2.4、索引管理

      es 中最重要的就是索引库,客户端如何创建呢?请看下文!

      创建索引

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class IndexJunit {
      
      
          @Autowired
          private RestHighLevelClient client;
      
          /**
           * 创建索引(简单模式)
           * @throws IOException
           */
          @Test
          public void createIndex() throws IOException {
              CreateIndexRequest request = new CreateIndexRequest("cs_index");
              CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
              System.out.println(response.isAcknowledged());
          }
      
      
          /**
           * 创建索引(复杂模式)
           * 可以直接把对应的文档结构也一并初始化
           * @throws IOException
           */
          @Test
          public void createIndexComplete() throws IOException {
              CreateIndexRequest request = new CreateIndexRequest();
              //索引名称
              request.index("cs_index");
              //索引配置
              Settings settings = Settings.builder()
                      .put("index.number_of_shards", 3)
                      .put("index.number_of_replicas", 1)
                      .build();
              request.settings(settings);
      
              //映射结构字段
              Map properties = new HashMap();
              properties.put("id", ImmutableBiMap.of("type", "text"));
              properties.put("name", ImmutableBiMap.of("type", "text"));
              properties.put("sex", ImmutableBiMap.of("type", "text"));
              properties.put("age", ImmutableBiMap.of("type", "long"));
              properties.put("city", ImmutableBiMap.of("type", "text"));
              properties.put("createTime", ImmutableBiMap.of("type", "long"));
              Map mapping = new HashMap<>();
              mapping.put("properties", properties);
              //添加一个默认类型
              System.out.println(JSON.toJSONString(request));
              request.mapping("_doc",mapping);
              CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
              System.out.println(response.isAcknowledged());
          }
      
      }

      删除索引

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class IndexJunit {
      
      
          @Autowired
          private RestHighLevelClient client;
      
          /**
           * 删除索引
           * @throws IOException
           */
          @Test
          public void deleteIndex() throws IOException {
              DeleteIndexRequest request = new DeleteIndexRequest("cs_index1");
              AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
              System.out.println(response.isAcknowledged());
          }
      
      
      }

      查询索引

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class IndexJunit {
      
      
          @Autowired
          private RestHighLevelClient client;
      
          /**
           * 查询索引
           * @throws IOException
           */
          @Test
          public void getIndex() throws IOException {
              // 创建请求
              GetIndexRequest request = new GetIndexRequest();
              request.indices("cs_index");
              // 执行请求,获取响应
              GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
              System.out.println(response.toString());
          }
      
      }

      查询索引是否存在

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class IndexJunit {
      
      
          @Autowired
          private RestHighLevelClient client;
      
          /**
           * 检查索引是否存在
           * @throws IOException
           */
          @Test
          public void exists() throws IOException {
              // 创建请求
              GetIndexRequest request = new GetIndexRequest();
              request.indices("cs_index");
              // 执行请求,获取响应
              boolean response = client.indices().exists(request, RequestOptions.DEFAULT);
              System.out.println(response);
          }
      
      }

      查询所有的索引名称

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class IndexJunit {
      
      
          @Autowired
          private RestHighLevelClient client;
      
          /**
           * 查询所有的索引名称
           * @throws IOException
           */
          @Test
          public void getAllIndices() throws IOException {
              GetAliasesRequest request = new GetAliasesRequest();
              GetAliasesResponse response =  client.indices().getAlias(request,RequestOptions.DEFAULT);
              Map> map = response.getAliases();
              Set indices = map.keySet();
              for (String key : indices) {
                  System.out.println(key);
              }
          }
      
      }

      查询索引映射字段

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class IndexJunit {
      
      
          @Autowired
          private RestHighLevelClient client;
      
          /**
           * 查询索引映射字段
           * @throws IOException
           */
          @Test
          public void getMapping() throws IOException {
              GetMappingsRequest request = new GetMappingsRequest();
              request.indices("cs_index");
              request.types("_doc");
              GetMappingsResponse response = client.indices().getMapping(request, RequestOptions.DEFAULT);
              System.out.println(response.toString());
          }
      
      
      }

      添加索引映射字段

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class IndexJunit {
      
      
          @Autowired
          private RestHighLevelClient client;
      
          /**
           * 添加索引映射字段
           * @throws IOException
           */
          @Test
          public void addMapping() throws IOException {
              PutMappingRequest request = new PutMappingRequest();
              request.indices("cs_index");
              request.type("_doc");
      
              //添加字段
              Map properties = new HashMap();
              properties.put("accountName", ImmutableBiMap.of("type", "keyword"));
              Map mapping = new HashMap<>();
              mapping.put("properties", properties);
              request.source(mapping);
              PutMappingResponse response = client.indices().putMapping(request, RequestOptions.DEFAULT);
              System.out.println(response.isAcknowledged());
          }
      
      
      }

      2.5、文档管理

      所谓文档,就是向索引里面添加数据,方便进行数据查询,详细操作内容,请看下文!

      添加文档

      ublic class UserDocument {
      
          private String id;
          private String name;
          private String sex;
          private Integer age;
          private String city;
          private Date createTime;
      
          //省略get、set...
      }
      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class DocJunit {
      
          @Autowired
          private RestHighLevelClient client;
      
      
          /**
           * 添加文档
           * @throws IOException
           */
          @Test
          public void addDocument() throws IOException {
              // 创建对象
              UserDocument user = new UserDocument();
              user.setId("1");
              user.setName("里斯");
              user.setCity("武汉");
              user.setSex("男");
              user.setAge(20);
              user.setCreateTime(new Date());
      
              // 创建索引,即获取索引
              IndexRequest request = new IndexRequest();
              // 外层参数
              request.id("1");
              request.index("cs_index");
              request.type("_doc");
              request.timeout(TimeValue.timeValueSeconds(1));
              // 存入对象
              request.source(JSON.toJSONString(user), XContentType.JSON);
              // 发送请求
              System.out.println(request.toString());
              IndexResponse response = client.index(request, RequestOptions.DEFAULT);
              System.out.println(response.toString());
          }
      
      }

      更新文档

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class DocJunit {
      
          @Autowired
          private RestHighLevelClient client;
      
      
          /**
           * 更新文档(按需修改)
           * @throws IOException
           */
          @Test
          public void updateDocument() throws IOException {
              // 创建对象
              UserDocument user = new UserDocument();
              user.setId("2");
              user.setName("程咬金");
              user.setCreateTime(new Date());
              // 创建索引,即获取索引
              UpdateRequest request = new UpdateRequest();
              // 外层参数
              request.id("2");
              request.index("cs_index");
              request.type("_doc");
              request.timeout(TimeValue.timeValueSeconds(1));
              // 存入对象
              request.doc(JSON.toJSONString(user), XContentType.JSON);
              // 发送请求
              System.out.println(request.toString());
              UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
              System.out.println(response.toString());
          }
      
      
      }

      删除文档

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class DocJunit {
      
          @Autowired
          private RestHighLevelClient client;
      
      
          /**
           * 删除文档
           * @throws IOException
           */
          @Test
          public void deleteDocument() throws IOException {
              // 创建索引,即获取索引
              DeleteRequest request = new DeleteRequest();
              // 外层参数
              request.id("1");
              request.index("cs_index");
              request.type("_doc");
              request.timeout(TimeValue.timeValueSeconds(1));
              // 发送请求
              System.out.println(request.toString());
              DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
              System.out.println(response.toString());
          }
      
      
      }

      查询文档是不是存在

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class DocJunit {
      
          @Autowired
          private RestHighLevelClient client;
      
      
          /**
           * 查询文档是不是存在
           * @throws IOException
           */
          @Test
          public void exists() throws IOException {
              // 创建索引,即获取索引
              GetRequest request = new GetRequest();
              // 外层参数
              request.id("3");
              request.index("cs_index");
              request.type("_doc");
              // 发送请求
              System.out.println(request.toString());
              boolean response = client.exists(request, RequestOptions.DEFAULT);
              System.out.println(response);
          }
      }

      通过 ID 查询指定文档

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class DocJunit {
      
          @Autowired
          private RestHighLevelClient client;
      
      
          /**
           * 通过ID,查询指定文档
           * @throws IOException
           */
          @Test
          public void getById() throws IOException {
              // 创建索引,即获取索引
              GetRequest request = new GetRequest();
              // 外层参数
              request.id("1");
              request.index("cs_index");
              request.type("_doc");
              // 发送请求
              System.out.println(request.toString());
              GetResponse response = client.get(request, RequestOptions.DEFAULT);
              System.out.println(response.toString());
          }
      }

      批量添加文档

      @RunWith(SpringJUnit4ClassRunner.class)
      @SpringBootTest(classes = ElasticSearchApplication.class)
      public class DocJunit {
      
          @Autowired
          private RestHighLevelClient client;
      
      
          /**
           * 批量添加文档
           * @throws IOException
           */
          @Test
          public void batchAddDocument() throws IOException {
              // 批量请求
              BulkRequest bulkRequest = new BulkRequest();
              bulkRequest.timeout(TimeValue.timeValueSeconds(10));
              // 创建对象
              List userArrayList = new ArrayList<>();
              userArrayList.add(new UserDocument("张三", "男", 30, "武汉"));
              userArrayList.add(new UserDocument("里斯", "女", 31, "北京"));
              userArrayList.add(new UserDocument("王五", "男", 32, "武汉"));
              userArrayList.add(new UserDocument("赵六", "女", 33, "长沙"));
              userArrayList.add(new UserDocument("七七", "男", 34, "武汉"));
              // 添加请求
              for (int i = 0; i < userArrayList.size(); i++) {
                  userArrayList.get(i).setId(String.valueOf(i));
                  IndexRequest indexRequest = new IndexRequest();
                  // 外层参数
                  indexRequest.id(String.valueOf(i));
                  indexRequest.index("cs_index");
                  indexRequest.type("_doc");
                  indexRequest.timeout(TimeValue.timeValueSeconds(1));
                  indexRequest.source(JSON.toJSONString(userArrayList.get(i)), XContentType.JSON);
                  bulkRequest.add(indexRequest);
              }
              // 执行请求
              BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
              System.out.println(response.status());
          }
      
      }
      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Elasticsearch
      相关文章 更多
      如何在PHP项目中集成Elasticsearch的实时搜索
      如何在PHP项目中集成Elasticsearch的实时搜索

      如何在PHP项目中集成Elasticsearch的实时搜索概述:Elasticsearch是一个开源的全文搜索引擎,可以用于实时搜索和分析数据。它具有灵活的查询语言和高效的索引机制,使得在大数据量下能够快速地搜索和过滤数据。在PHP项目中集成Elasticsearch可以帮助我们实现实时搜索功能,提升用户体验。步骤:安装和配置Elasticsearch首先,

      如何使用Elasticsearch和PHP构建高性能的新闻推荐系统
      如何使用Elasticsearch和PHP构建高性能的新闻推荐系统

      如何使用Elasticsearch和PHP构建高性能的新闻推荐系统摘要:新闻推荐系统已经成为现代互联网应用程序不可或缺的一部分。它能够根据用户的兴趣和偏好,提供个性化的新闻内容推荐。本文将介绍如何使用Elasticsearch和PHP构建高性能的新闻推荐系统,并提供相关的代码示例。一、准备工作在开始之前,确保你已经安装了以下软件:Elasticsearch:

      Redis与Elasticsearch的区别与使用场景
      Redis与Elasticsearch的区别与使用场景

      Redis与Elasticsearch的区别与使用场景随着互联网信息的快速发展和海量化,数据的高效存储和检索变得越来越重要。为此,NoSQL(NotOnlySQL)类型的数据库出现了,其中又以Redis和Elasticsearch较为流行。本文将对Redis和Elasticsearch进行比较,并探讨它们的使用场景。Redis与Elasticsearch

      PHP和Elasticsearch实现的实时商品价格监控方案
      PHP和Elasticsearch实现的实时商品价格监控方案

      PHP和Elasticsearch实现的实时商品价格监控方案概述:随着电商行业的快速发展,商品价格的监控和实时调整变得越来越重要。在传统的价格监控方案中,常常需要不断地手动抓取数据并进行比对,效率低下且容易出错。而利用PHP和Elasticsearch的结合,我们可以实现一种高效、准确的实时商品价格监控方案。介绍Elasticsearch:Elasticse

      PHP和Elasticsearch实现的实时数据挖掘的技术原理
      PHP和Elasticsearch实现的实时数据挖掘的技术原理

      PHP和Elasticsearch实现的实时数据挖掘的技术原理随着互联网的快速发展,数据量呈爆炸式增长,数据挖掘技术成为了处理和分析大规模数据的重要工具。而实时数据挖掘技术,更能满足当前快节奏的商业需求。在这篇文章中,我们将介绍如何使用PHP和Elasticsearch实现实时数据挖掘,并分享一些代码示例。技术原理1.1Elasticsearch简介Ela

      springBoot项目常用目录有哪些
      springBoot项目常用目录有哪些

      springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

      PHP中使用Elasticsearch实现的实时数据压缩和解压方法
      PHP中使用Elasticsearch实现的实时数据压缩和解压方法

      PHP中使用Elasticsearch实现的实时数据压缩和解压方法数据压缩在现代的数据处理中扮演着重要的角色。随着数据量的不断增加,高效地压缩和解压数据变得日益重要。在PHP开发中,我们可以利用Elasticsearch的一些功能来实现实时的数据压缩和解压操作。Elasticsearch是一个分布式、RESTful风格的搜索和分析引擎,它提供了灵活而强大的功

      PHP中使用Elasticsearch实现高性能的数据聚合查询
      PHP中使用Elasticsearch实现高性能的数据聚合查询

      PHP中使用Elasticsearch实现高性能的数据聚合查询在现代化的web应用中,数据聚合查询是一个非常关键的功能。传统的关系型数据库在处理大量数据聚合时可能会面临性能瓶颈,因此我们可以借助Elasticsearch这一强大的分布式搜索引擎来实现高性能的数据聚合查询功能。本文将介绍如何在PHP中使用Elasticsearch实现这一功能,并给出相应的代码

      如何使用Elasticsearch和PHP构建智能推荐引擎
      如何使用Elasticsearch和PHP构建智能推荐引擎

      如何使用Elasticsearch和PHP构建智能推荐引擎引言:在互联网时代,推荐引擎扮演着越来越重要的角色。它不仅可以帮助用户发现感兴趣的内容,还可以提高用户体验和网站的粘性。Elasticsearch作为一种流行的全文搜索引擎,具有快速、可扩展、强大的搜索功能。结合PHP作为后端语言,我们可以利用Elasticsearch的强大功能构建一个智能高效的推荐

      如何使用PHP和Elasticsearch构建强大的搜索功能
      如何使用PHP和Elasticsearch构建强大的搜索功能

      如何使用PHP和Elasticsearch构建强大的搜索功能随着互联网的发展和数据的增长,搜索功能已经成为了一个网站或应用程序中不可或缺的部分。而Elasticsearch作为一个高性能的开源分布式搜索和分析引擎,正受到越来越多开发者的关注和使用。本文将介绍如何使用PHP和Elasticsearch构建一个强大的搜索功能,并提供代码示例。一、安装和配置Ela

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。