环球看热讯:【ES三周年】万字长文带你实战 Elasticsearch 搜索
上篇我们讲到了Elasticsearch全文检索的原理《别只会搜日志了,求你懂点原理吧》,通过在本地搭建一套ES...
2023-02-24上篇我们讲到了 Elasticsearch 全文检索的原理《别只会搜日志了,求你懂点原理吧》,通过在本地搭建一套 ES 服务,以多个案例来分析了 ES 的原理以及基础使用。这次我们来讲下 Spring Boot 中如何整合 ES,以及如何在 Spring Cloud 微服务项目中使用 ES 来实现全文检索,来达到搜索题库的功能。
而且题库的数据量是非常大的,题目的答案也是非常长的,通过 ES 正好可以解决 mysql 模糊搜索的低效性。
(相关资料图)
通过本实战您可以学到如下知识点:
Spring Boot 如何整合 ES。微服务中 ES 的 API 使用。项目中如何使用 ES 来达到全文检索。本篇主要内容如下:
本文案例都是基于 PassJava 实战项目来演示的。
:+1:Github 地址:https://github.com/Jackson0714/PassJava-Platform
在讲解之前,我在这里再次提下全文检索是什么:
全文检索:指以全部文本信息作为检索对象的一种信息检索技术。而我们使用的数据库,如 Mysql,MongoDB 对文本信息检索能力特别是中文检索并没有 ES 强大。所以我们来看下 ES 在项目中是如何来代替 SQL 来工作的。
我使用的 Elasticsearch 服务是 7.4.2 的版本,然后采用官方提供的 Elastiscsearch-Rest-Client 库来操作 ES,而且官方库的 API 上手简单。
该组件库的官方文档地址:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html另外这个组件库是支持多种语言的:
注意:Elasticsearch Clients就是指如何用 API 操作 ES 服务的组件库。
可能有同学会提问,Elasticsearch 的组件库中写着 JavaScript API,是不是可以直接在前端访问 ES 服务?可以是可以,但是会暴露 ES 服务的端口和 IP 地址,会非常不安全。所以我们还是用后端服务来访问 ES 服务。
我们这个项目是 Java 项目,自然就是用上面的两种:Java Rest Client或者 Java API。我们先看下 Java API,但是会发现已经废弃了。如下图所示:
所以我们只能用 Java REST Client 了。而它又分成两种:高级和低级的。高级包含更多的功能,如果把高级比作MyBatis的话,那么低级就相当于JDBC。所以我们用高级的 Client。
我们把检索服务单独作为一个服务。就称作 passjava-search 模块吧。
首先我们在 PassJava-Platform 模块创建一个 搜索服务模块 passjava-search。然后勾选 spring web 服务。如下图所示。
第一步:选择 Spring Initializr,然后点击 Next。
第二步:填写模块信息,然后点击 Next。
第三步:选择 Web->Spring Web 依赖,然后点击 Next。
进入到 ES 官方网站,可以看到有低级和高级的 Rest Client,我们选择高阶的(High Level Rest Client)。然后进入到高阶 Rest Client 的 Maven 仓库。官网地址如下所示:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.9/index.html对应文件路径:\passjava-search\pom.xml
org.elasticsearch.client elasticsearch-rest-high-level-client 7.4.2 配置 elasticsearch 的版本为7.4.2因加上 Maven 依赖后,elasticsearch 版本为 7.6.2,所以遇到这种版本不一致的情况时,需要手动改掉。
对应文件路径:\passjava-search\pom.xml
7.4.2 刷新 Maven Project 后,可以看到引入的 elasticsearch 都是 7.4.2 版本了,如下图所示:
Common 模块是 PassJava 项目独立的出来的公共模块,引入了很多公共组件依赖,其他模块引入 Common 模块依赖后,就不需要单独引入这些公共组件了,非常方便。
对应文件路径:\passjava-search\pom.xml
com.jackson0714.passjava passjava-common 0.0.1-SNAPSHOT 添加完依赖后,我们就可以将搜索服务注册到 Nacos注册中心了。 Nacos 注册中心的用法在前面几篇文章中也详细讲解过,这里需要注意的是要先启动 Nacos 注册中心,才能正常注册 passjava-search 服务。
修改配置文件:src/main/resources/application.properties。配置应用程序名、注册中心地址、注册中心的命名中间。
spring.application.name=passjava-searchspring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.namespace=passjava-search给启动类添加服务发现注解:@EnableDiscoveryClient。这样 passjava-search 服务就可以被注册中心发现了。
因 Common 模块依赖数据源,但 search 模块不依赖数据源,所以 search 模块需要移除数据源依赖:
exclude = DataSourceAutoConfiguration.class以上的两个注解如下所示:
@EnableDiscoveryClient@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)public class PassjavaSearchApplication { public static void main(String[] args) { SpringApplication.run(PassjavaSearchApplication.class, args); }}接下来我们添加一个 ES 服务的专属配置类,主要目的是自动加载一个 ES Client 来供后续 ES API 使用,不用每次都 new 一个 ES Client。
配置类:PassJavaElasticsearchConfig.java
核心方法就是 RestClient.builder 方法,设置好 ES 服务的 IP 地址、端口号、传输协议就可以了。最后自动加载了 RestHighLevelClient。
package com.jackson0714.passjava.search.config;import org.apache.http.HttpHost;import org.elasticsearch.client.RestClient;import org.elasticsearch.client.RestHighLevelClient;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @Author: 公众号 | 悟空聊架构 * @Date: 2020/10/8 17:02 * @Site: www.passjava.cn * @Github: https://github.com/Jackson0714/PassJava-Platform */@Configurationpublic class PassJavaElasticsearchConfig { @Bean // 给容器注册一个 RestHighLevelClient,用来操作 ES // 参考官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.9/java-rest-high-getting-started-initialization.html public RestHighLevelClient restHighLevelClient() { return new RestHighLevelClient( RestClient.builder( new HttpHost("192.168.56.10", 9200, "http"))); }}接下来我们测试下 ES Client 是否自动加载成功。
在测试类 PassjavaSearchApplicationTests 中编写测试方法,打印出自动加载的 ES Client。期望结果是一个 RestHighLevelClient 对象。
package com.jackson0714.passjava.search;import org.elasticsearch.client.RestHighLevelClient;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass PassjavaSearchApplicationTests { @Qualifier("restHighLevelClient") @Autowired private RestHighLevelClient client; @Test public void contextLoads() { System.out.println(client); }}运行结果如下所示,打印出了 RestHighLevelClient。说明自定义的 ES Client 自动装载成功。
测试方法 testIndexData,省略 User 类。users 索引在我的 ES 中是没有记录的,所以期望结果是 ES 中新增了一条 users 数据。
/** * 测试存储数据到 ES。 * */@Testpublic void testIndexData() throws IOException { IndexRequest request = new IndexRequest("users"); request.id("1"); // 文档的 id //构造 User 对象 User user = new User(); user.setUserName("PassJava"); user.setAge("18"); user.setGender("Man"); //User 对象转为 JSON 数据 String jsonString = JSON.toJSONString(user); // JSON 数据放入 request 中 request.source(jsonString, XContentType.JSON); // 执行插入操作 IndexResponse response = client.index(request, RequestOptions.DEFAULT); System.out.println(response);}执行 test 方法,我们可以看到控制台输出以下结果,说明数据插入到 ES 成功。另外需要注意的是结果中的 result 字段为 updated,是因为我本地为了截图,多执行了几次插入操作,但因为 id = 1,所以做的都是 updated 操作,而不是 created 操作。
我们再来到 ES 中看下 users 索引中数据。查询 users 索引:
GET users/_search结果如下所示:
可以从图中看到有一条记录被查询出来,查询出来的数据的 _id = 1,和插入的文档 id 一致。另外几个字段的值也是一致的。说明插入的数据没有问题。
"age" : "18","gender" : "Man","userName" : "PassJava"示例:搜索 bank 索引,address 字段中包含 big 的所有人的年龄分布 ( 前 10 条 ) 以及平均年龄,以及平均薪资。
我们可以参照官方文档给出的示例来创建一个 SearchRequest 对象,指定要查询的索引为 bank,然后创建一个 SearchSourceBuilder 来组装查询条件。总共有三种条件需要组装:
address 中包含 road 的所有人。按照年龄分布进行聚合。计算平均薪资。代码如下所示,需要源码请到我的 Github/PassJava 上下载。
将打印出来的检索参数复制出来,然后放到 JSON 格式化工具中格式化一下,再粘贴到 ES 控制台执行,发现执行结果是正确的。
用在线工具格式化 JSON 字符串,结果如下所示:

然后我们去掉其中的一些默认参数,最后简化后的检索参数放到 Kibana 中执行。
Kibana Dev Tools 控制台中执行检索语句如下图所示,检索结果如下图所示:
找到总记录数:29 条。
第一条命中记录的详情如下:
平均 balance:13136。
平均年龄:26。
地址中包含 Road 的:263 Aviation Road。
和 IDEA 中执行的测试结果一致,说明复杂检索的功能已经成功实现。
而获取命中记录的详情数据,则需要通过两次 getHists() 方法拿到,如下所示:
// 3.1)获取查到的数据。SearchHits hits = response.getHits();// 3.2)获取真正命中的结果SearchHit[] searchHits = hits.getHits();我们可以通过遍历 searchHits 的方式打印出所有命中结果的详情。
// 3.3)、遍历命中结果for (SearchHit hit: searchHits) { String hitStr = hit.getSourceAsString(); BankMember bankMember = JSON.parseObject(hitStr, BankMember.class);}拿到每条记录的 hitStr 是个 JSON 数据,如下所示:
{"account_number": 431,"balance": 13136,"firstname": "Laurie","lastname": "Shaw","age": 26,"gender": "F","address": "263 Aviation Road","employer": "Zillanet","email": "laurieshaw@zillanet.com","city": "Harmon","state": "WV"}而 BankMember 是根据返回的结果详情定义的的 JavaBean。可以通过工具自动生成。在线生成 JavaBean 的网站如下:
https://www.bejson.com/json2javapojo/new/把这个 JavaBean 加到 PassjavaSearchApplicationTests 类中:
@ToString@Datastatic class BankMember { private int account_number; private int balance; private String firstname; private String lastname; private int age; private String gender; private String address; private String employer; private String email; private String city; private String state;}然后将 bankMember 打印出来:
System.out.println(bankMember);得到的结果确实是我们封装的 BankMember 对象,而且里面的属性值也都拿到了。
ES 返回的 response 中,年龄分布的数据是按照 ES 的格式返回的,如果想按照我们自己的格式来返回,就需要将 response 进行处理。
如下图所示,这个是查询到的年龄分布结果,我们需要将其中某些字段取出来,比如 buckets,它代表了分布在 21 岁的有 4 个。
下面是代码实现:
Aggregations aggregations = response.getAggregations();Terms ageAgg1 = aggregations.get("ageAgg");for (Terms.Bucket bucket : ageAgg1.getBuckets()) { String keyAsString = bucket.getKeyAsString(); System.out.println("用户年龄: " + keyAsString + " 人数:" + bucket.getDocCount());}最后打印的结果如下,21 岁的有 4 人,26 岁的有 4 人,等等。
现在来看看平均薪资如何按照所需的格式返回,ES 返回的结果如下图所示,我们需要获取 balanceAvg 字段的 value 值。
代码实现:
Avg balanceAvg1 = aggregations.get("balanceAvg");System.out.println("平均薪资:" + balanceAvg1.getValue());打印结果如下,平均薪资 28578 元。
PassJava 这个项目可以用来配置题库,如果我们想通过关键字来搜索题库,该怎么做呢?
类似于百度搜索,输入几个关键字就可以搜到关联的结果,我们这个功能也是类似,通过 Elasticsearch 做检索引擎,后台管理界面和小程序作为搜索入口,只需要在小程序上输入关键字,就可以检索相关的题目和答案。
首先我们需要把题目和答案保存到 ES 中,在存之前,第一步是定义索引的模型,如下所示,模型中有 title和 answer字段,表示题目和答案。
"id": { "type": "long"},"title": { "type": "text", "analyzer": "ik_smart"},"answer": { "type": "text", "analyzer": "ik_smart"},"typeName": { "type": "keyword"}上面我们已经定义了索引结构,接着就是在 ES 中创建索引。
在 Kibana 控制台中执行以下语句:
PUT question{"mappings" : { "properties": { "id": { "type": "long" }, "title": { "type": "text", "analyzer": "ik_smart" }, "answer": { "type": "text", "analyzer": "ik_smart" }, "typeName": { "type": "keyword" }} }}执行结果如下所示:
我们可以通过以下命令来查看 question 索引是否在 ES 中:
GET _cat/indices执行结果如下图所示:
上面我们定义 ES 的索引,接着就是定义索引对应的模型,将数据存到这个模型中,然后再存到 ES 中。
ES 模型如下,共四个字段:id、title、answer、typeName。和 ES 索引是相互对应的。
@Datapublic class QuestionEsModel { private Long id; private String title; private String answer; private String typeName;}当我们在后台创建题目或保存题目时,先将数据保存到 mysql 数据库,然后再保存到 ES 中。
如下图所示,在管理后台创建题目时,触发保存数据到 ES 。
第一步,保存数据到 mysql 中,项目中已经包含此功能,就不再讲解了,直接进入第二步:保存数据到 ES 中。
而保存数据到 ES 中,需要将数据组装成 ES 索引对应的数据,所以我用了一个 ES model,先将数据保存到 ES model 中。
这里的关键代码时 copyProperties,可以将 question对象的数据取出,然后赋值到 ES model 中。不过 ES model 中还有些字段是 question 中没有的,所以需要单独拎出来赋值,比如 typeName 字段,question 对象中没有这个字段,它对应的字段是 question.type,所以我们把 type 取出来赋值到 ES model 的 typeName 字段上。如下图所示:
我在 passjava-search 微服务中写了一个保存题目的 api 用来保存数据到 ES 中。
然后在 passjava-question 微服务中调用 search 微服务的保存 ES 的方法就可以了。
// 调用 passjava-search 服务,将数据发送到 ES 中保存。searchFeignService.saveQuestion(esModel);我们可以通过 kibana 的控制台来查看 question 索引中的文档。通过以下命令来查看:
GET question/_search执行结果如下图所示,有一条记录:
另外大家有没有疑问:可以重复更新题目吗?
答案是可以的,保存到 ES 的数据是幂等的,因为保存的时候带了一个类似数据库主键的 id。
我们已经将数据同步到了 ES 中,现在就是前端怎么去查询 ES 数据中,这里我们还是使用 Postman 来模拟前端查询请求。
请求参数我定义了三个:
keyword:用来匹配问题或者答案。id:用来匹配题目 id。pageNum:用来分页查询数据。这里我将这三个参数定义为一个类:
@Datapublic class SearchParam { private String keyword; // 全文匹配的关键字 private String id; // 题目 id private Integer pageNum; // 查询第几页数据}返回的 response 我也定义了四个字段:
questionList:查询到的题目列表。pageNum:第几页数据。total:查询到的总条数。totalPages:总页数。定义的类如下所示:
@Datapublic class SearchQuestionResponse { private List questionList; // 题目列表 private Integer pageNum; // 查询第几页数据 private Long total; // 总条数 private Integer totalPages; // 总页数} 调用 ES 的查询 API 时,需要构建查询参数。
组装查询参数的核心代码如下所示:
ES 返回的数据是 ES 定义的格式,真正的数据被嵌套在 ES 的 response 中,所以需要格式化返回的数据。
核心代码如下图所示:
我们现在想要验证 title 字段是否能匹配到,传的请求参数 keyword = 111,匹配到了 title = 111 的数据,且只有一条。页码 pageNum 我传的 1,表示返回第一页数据。如下图所示:
我们现在想要验证 answer 字段是否能匹配到,传的请求参数 keyword = 测试答案,匹配到了 title = 测试答案的数据,且只有一条,说明查询成功。如下图所示:
我们现在想要匹配题目 id 的话,需要传请求参数 id,而且 id 是精确匹配。另外 id 和 keyword 是取并集,所以不能传 keyword 字段。
请求参数 id = 5,返回结果也是 id =5 的数据,说明查询成功。如下图所示:
本文通过我的开源项目 passjava 来讲解 ES 的整合,ES 的 API 使用以及测试。非常详细地讲解了每一步该如何做,相信通过阅读本篇后,再加上自己的实践,一定能掌握前后端该如何使用 ES 来达到高效搜索的目的。
当然,ES API 还有很多功能未在本文实践,有兴趣的同学可以到 ES 官网进行查阅和学习。
上篇我们讲到了Elasticsearch全文检索的原理《别只会搜日志了,求你懂点原理吧》,通过在本地搭建一套ES...
2023-02-24
伊朗一直升机坠毁造成1死17伤,体育部长等官员也在机上,坠毁,直升机,伊朗,德黑兰,克尔曼
2023-02-24
施工生产不停歇!龙井市多家企业奋力冲刺“开门红”
2023-02-24
1、夜大本科,想考CCAA国家注册的审核员,而且现在正在接触相关的工作。2、主要不知道取得注册审核员的...
2023-02-24
汉王科技(002362)02月24日在投资者关系平台上答复了投资者关心的问题。
2023-02-24
1、小规模代理记账一个月200元,一年2400元。2、一般纳税人代理记账一个月700元,一年8400元。本文到此...
2023-02-23
美媒:通胀和利率飙升,信用卡债务淹没美国人,美媒,信用卡,拖欠率,纽约联储,个人银行业务
2023-02-23
2 选择导航栏左侧运维中心>日志管理>事件日志,进入“事件检索”页面。通过事件仪表盘检索已有的事件样...
2023-02-23
突发!中美增加航班无望?!美联航推迟到10月底才会增加航班,直飞,美联航,美航班,达美航空,增加航班,美...
2023-02-23
通州区重点产业知识产权运营公共服务平台上线运行2月20日,南通(通州)知识产权运营平台正式上线运行。...
2023-02-23
编程客栈()2月23日消息:据QuestMobile发布的《2022年中国移动互联网年度报告》显示,2022年,中国移动互...
2023-02-23
2022年美国电动汽车注册量上涨57%份额涨至5 6%
2023-02-23
1、开7 0先会接到职业大厅任务,在职业大厅会接到职业神器任务,每个职业每一系列天赋专精神器都不相同...
2023-02-23
一、关于严的部首是什么的读法1、读法:[yán]二、关于严的部首是什么的释义2、基础释义:1 严密;紧密...
2023-02-22
1、新型农村社会养老保险(anewtypeofpensioninsuranceforruralresid
2023-02-22
1搜索公众号打开微信,搜索德邦微信公众号,点击进入。2点击个人中心然后点击右下角我,点击个人中心。3...
2023-02-22
浙江统计消息按照国家统计局统一部署,2022年浙江省5‰人口变动抽样调查以全省为总体,以11个设区市为子...
2023-02-22
“当我事业发展不好的时候,想一想李乃文我就没那么难受了。”李乃文的朋友说。李乃文是谁?听到这个名...
2023-02-22
近日,全国工商联、人力资源和社会保障部门、全国总工会联合发布“全国就业与社会保障先进民营企业和全...
2023-02-22
夏弥来为大家解答以下的问题,lowe玻璃,说一说lowe玻璃的简介,现在让我们一起来看看吧!1、Low-E玻璃...
2023-02-22
根据市场公开信息及2月21日披露的机构调研信息,融通基金近期对2家上市公司进行了调研,相关名单如下:1...
2023-02-22
1、A789驱动安装2、下载a789驱动,解压。3、继续解压缩解压缩文件夹中的两个zip文件。4、进入设备管理器。5、进
2023-02-22
佛堂镇社会治理中心揭牌2月17日,佛堂镇社会治理中心揭牌仪式举行。市委副书记、政法委书记唐剑刚,市委...
2023-02-21
“宁波有学校停课了吗?是疫情吗?”“宁波感染小高峰要来了吗?”2月20日,宁波杭州湾新区世纪城实验小...
2023-02-21
2023年2月21日,惠城环保发生1笔大宗交易,总成交10 97万股,成交金额399 75万元,成交价36 44元,折价14 20%。
2023-02-21
美国有毒化学品运载列车脱轨事故至今不断发酵。布蒂吉格说,美国国家运输安全委员会正调查脱轨原因,联...
2023-02-21
1、你好,根据你的描述2007年发现有高血压,一直没有治疗,2008年左耳朵至今一直响,可能是血压高引起,目前...
2023-02-21
大学生付费就业咨询热潮渐起花钱咨询效果更好吗
2023-02-21
1、您好挑选凤眼菩提以下几个方面首先看密度。2、凤眼捻起来籽来感觉重。3、通常好的凤眼和星月重量相等...
2023-02-21
1、意思是家家户户都传来捣衣服的声音。以上就是【万户捣衣声是什么意思,万户捣衣声】相关内容。
2023-02-21
1、经期头痛引起的原因很多,女性经期头痛主要是因内分泌失调、排卵障碍、子宫内膜异位或炎症等,属中医...
2023-02-20
信息时报讯(记者崔小远通讯员聂淑瑜)日前,在广州市南沙区科学技术局的指导下,南沙科金控股集团在南...
2023-02-20
抢时间、拼速度,寻新机、拓市场……长春新区工作会召开后,长春市委常委、副市长、长春新区党工委书记...
2023-02-20
2月贷款市场报价利率(LPR)出炉:1年期和5年期以上LPR分别维持在3 65%和4 30%不变。分析人士认为,由...
2023-02-20
1、苹果手机来电归属地错误如何修复?只需要几个简单的操作,具体操作如下:2、打开iPhone上的【设置】...
2023-02-20
2月19日,施工人员在常宁市三角塘镇塘冲村高标准农田建设现场施工(无人机照片)。眼下,湖南省常宁市高...
2023-02-20
1、不明白有人说佐助赢的有没有脑子,佐助被人打残两次,还群攻一个。2、还是打不赢,最后逼着用天照,...
2023-02-20
1、钱学森被称为中国航天之父、中国导弹之父、中国自动化控制之父、火箭之王。2、钱学森1911年12月11日...
2023-02-20
1、军神。2、个人观点。本文分享完毕,希望对大家有所帮助。
2023-02-20
中车资阳表示,该批机车是我国窄轨交流传动内燃机车出口领域,首批实现从零部件到整车全国产化、且具有...
2023-02-19
家以和为贵人以正为贵,家以和为贵。中国人自古以来流传的古训:家和万事兴。《礼记·大学》中提到:修...
2023-02-19
当年味浓厚的福州城喜迎新春,万家灯火点亮阖家团聚的幸福时光,在福建平潭及闽江口水资源配置工程(即...
2023-02-19
3次满分!麦克朗加冕全明星扣篮王
2023-02-19
本次窗口期,中国男篮将先后与哈萨克斯坦男篮和伊朗男篮交手,比赛时间如下(均为北京时间):2023年2月...
2023-02-19
1、质量性能较好的踏板摩托车。2、象合资品牌的五羊本田、新大洲本田、轻骑铃木、豪爵铃木、雅马哈、常...
2023-02-19
02月19日00时广东广州疫情数据阳了以后为什么会腰疼?应该怎么办?以下为详情!一、02月19日00时广州疫...
2023-02-19
当地时间2月3日晚,美国诺福克南方铁路公司一列货运列车途经俄亥俄
2023-02-18
加的斯球员:我和朋友打赌佩德里迟早会赢得金球奖,鲁本,佩德里,加的斯,金球奖,日本足球,足球竞赛,候选名...
2023-02-18
便民服务,厦禾分部早间提前半小时开诊!,
2023-02-18
开除前言自从DOINB在直播中宣布新赛季休息之后,很多DOINB粉丝也自发地,开始为DOINB找工作,只要看见有...
2023-02-18
1、本卷为梅兰芳大师二十世纪五十年代录音。2、与中国唱片公司一九八七年出版的《梅兰芳唱腔选集》第七...
2023-02-18
苹果iPhone15Pro渲染图曝光:改用USB-C端口,摄像头凸起加厚,手机,摄像头,保护壳,音量键,苹果公司,财务...
2023-02-17
东方网记者曹磊2月17日报道:今天上午,首届“上海慈善奖”表彰活动举办,星巴克凭借在中国慈善公益领域...
2023-02-17
2月9日,西安欧亚学院后勤集团年度工作会议暨年度优秀员工表彰典礼在大学生活动中心顺利召开。本次年度...
2023-02-17
去年底公布可能转板消息的易和国际(8659 HK),最近一年动作频频,似乎密锣紧鼓积极部署各种业务,包括其核...
2023-02-17
它让露天工地变室内工厂,它让建筑施工在百米高空如履平地,它最快4天盖好一层楼……“造楼机”实现了市...
2023-02-17
丹尼-格林本周接受采访时谈到了前东家76人,他回归骑士的首场比赛,恰好是与76人交手。谈及哈登,丹尼-...
2023-02-17
1、三轴智能水刀的价格50-65万五轴智能水刀LTJ2040-5A全套的105万狮迈五轴智能水刀LTJ1613-5A
2023-02-17
1、教师节礼物手工DIY教师节贺卡制作图片教程创意设计|DIY卡片 2014-09-07 小海牛 88574℃猜你喜欢:
2023-02-17
蛰伏已久的广州楼市,热度再度回归!上周2万组客户,风风火火杀入售楼部,多盘斩下开门红。政策也出现松...
2023-02-16
随着资管新规的落地,在净值化转型要求下,如何进行资产配置再次成为银行理财子等资管机构面临的一大难...
2023-02-16
昌平南口国土空间规划公示,未来将建清华科学城
2023-02-16
十一部门部署第二十四次全国爱耳日活动---今年3月3日是第二十四次全国爱耳日,中国残联、教育部、工业和...
2023-02-16
不知道大家有没有看见过类似于上图这种“科学护肤步骤”“正确护肤步骤”“早晚护肤步骤”等等各种各样...
2023-02-16
民航局:已恢复与58个国家间的客运定期航班,换季后国际航班有望进一步增加,客运,民航局,航班量,航空公...
2023-02-16
1孰是孰非?共享出行品牌iGO出行和比亚迪撕起来了,或者准确点,是和比亚迪旗下的腾势在撕。2月10日、11...
2023-02-16
在今日凌晨进行的一场欧冠1 8决赛首回合较量中,多特蒙德1-0击败切尔西。赛后在接受DAZN采访时,多特进...
2023-02-16
1、【10月21日辽宁新闻、太平洋电脑网】在最近播出的电视剧《后厨》中,海清饰演的女厨师徐炳给人们留下...
2023-02-16
手相算命中,可以从你的手相中看出未来的性格以及命运如何,那么你想知道怎样看手相知道未来的命运以及...
2023-02-16
工资打到卡上的具体时间各有不同,比如公司当天早上将员工数据交给银行,那么下午六点就能办好,如果公...
2023-02-16
5月18日是什么星座:5月18日是金牛座5月18日出生的金牛座富有理想喔!思路清晰、逻辑观念强的你,喜欢尝...
2023-02-16
英语作文七年级下册范文第1篇Afewdaysago,themovieRedSeaOperationwasveryhotandpeoplewereveryimpressi...
2023-02-15
1、奔驰S350L作为奔驰旗下的一款轿跑,自上市以来就以其靓丽的外观和高端的配置吸引了大批消费者。最近...
2023-02-15
1、乡村振兴包含哪些内容——到2020年,乡村振兴取得重要进展,制度框架和政策体系基本形成;——到2035...
2023-02-15
中国教育新闻网讯(记者焦小新)为充分发挥专家作用,广泛动员社会力量参与校外培训治理,教育部2022年...
2023-02-15
今天突出显示的交易来自NeowinDeals商店的在线课程部分,您可以在这个完整的父母和孩子编码中节省97%。无论您的
2023-02-15
MSCI中国指数是由摩根斯坦利国际资本公司(MSCI)编制的跟踪中国概念股票表现的指数。MSCI中国指数系列...
2023-02-15
1、安全模式解除的方法,如果绑定了微信可以用微信进行验证,或者验证高级密保问题,就可解除该模式。2...
2023-02-15
当前大家对于胡莱三国战争策略类网页游戏都是颇为感兴趣的,大家都想要了解一下胡莱三国战争策略类网页...
2023-02-15
2月15日消息,据外媒报道,Buzzfeed推出引入AI技术的测试栏目quizzes,CEOJonahPeretti表示,AI生成的内...
2023-02-15
电视剧我的前半生是由靳东、马伊琍、袁泉等人主演,此部剧口碑还是非常的好,那么我们先看看我的前半生...
2023-02-15
你需要的东西碗自硬化或风干粘土网球报纸抹布亚克力釉海绵刷使用粘土和网球制作您自己的月球岩石版本。...
2023-02-15
据央视新闻,比利时核电运营商Engie集团当地时间9月23日表示,比利时将在当天晚些时候正式关闭“杜尔3号...
2023-02-15
两学一做是当前我党加强思想建设、推进从严治党、提高党性修养的重大举措。下面就是学习啦小编给大家整...
2023-02-15
基本环氧树脂是一种坚硬的物质,当两种物质(环氧化物和多胺)结合时产生。大多数情况下,这两种化学物...
2023-02-15
大象是现存世界上最大的陆栖哺乳动物。大象是群居性动物,以家族为单位,非洲象由雌象做首领,每天活动...
2023-02-15
青壮年一般高烧阶段不超过3天,到第4、第5天会明显好转。如高烧持续3天以上,且没有缓解趋势,建议前往...
2023-02-15
生活当中有些小孩会有尿床的情况,而导致小孩尿床的原因有很多,那么小孩尿床是什么原因呢?有哪些方法可...
2023-02-14
对许多人来说,圣诞节是一个庆祝的日子,对于基督教信仰的人来说,节日的庆祝活动可以延伸到主日学课程...
2023-02-14
2023年1月,正值疫情防控进入新阶段后的首个春节。中国互联网联合辟谣平台根据网上数据监测和网民举报,...
2023-02-14
办健康证需要带什么根据《食品卫生法》、《公共场所卫生管理条例》等法规,从事食品生产经营,公共场所...
2023-02-14
1、如果需要补牙,具体价格需要看牙齿不好的程度。2、如果只是单纯的龋齿,有两种修复方法:第一种方法...
2023-02-14
詹姆斯连休湖人战线告急冲刺季后赛席位不应儿戏,湖人,威少,全明星,美国篮球,中国篮球,勒布朗詹姆斯,道格...
2023-02-14
1、1 打开财务软件——,进入财务软件——主页面,点击“财务会计”。2、【注:“财务会计”位于财务软...
2023-02-14
即使光环已不再也不要放弃你的梦想。像这样的qq空间主人寄语励志短语还有哪些呢?今天小编要与大家分享的...
2023-02-14
新居入住新宅的一个好宅,一定要去看望新宅的人了,但是也要带礼物,那么送他们什么好。送一些室内的用...
2023-02-14
1、风神之瞳在凤龙遗址的12个位置如下图所示。2、明观峡(6)3、果酒湖(2)4、望峰山(2)5、了望角度(2)6、星崖
2023-02-14
北京时间2月14日,据相关媒体报道,卡梅罗-安东尼自上个赛季结束之后,一直到目前仍旧是自由球员。近日...
2023-02-14
专家回答(3)诺基亚公司是一家总部位于芬兰埃斯波,主要从事移动通信设备生产和相关服务的跨国公司。诺...
2023-02-14
1、明亮拼音:2、明亮的3、明亮的色调:4、明明的声调是两个声调,亮丽的声调是四个声调。5、明亮拼音:...
2023-02-14Copyright © 2015-2022 西南水产网版权所有 备案号:皖ICP备2022009963号-8 联系邮箱:39 60 29 14 2@qq.com