ES配置
config配置类
- @Configuration
- @ConfigurationProperties(prefix = "es")
- @Data
- public class InitEsRes {
- private String host;
- private int port;
- private String scheme;
- @Bean
- public RestHighLevelClient restHighLevelClient(){
- return new RestHighLevelClient(
- RestClient.builder(new HttpHost(host,port,scheme))
- );
- }
- }
复制代码 application.yml 配置
- es:
- host: localhost
- port: 9200
- scheme: http
复制代码 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增长了如下几点新功能,帮助你用它写博客:
- 全新的界面计划 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增长了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增长了支持甘特图的mermaid语法1 功能;
- 增长了 多屏幕编辑 Markdown文章功能;
- 增长了 核心写作模式、预览模式、简便写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增长了 检查列表 功能。
ES 增删改查 代码实例
业务层 serviceImpl
高亮
- @Override
- public Result<PageResult<ArticleResponse>> search(ArticleRequest articleRequest) {
- // 定义结果集
- long total = 0;
- List<ArticleResponse> articleResponseList = new ArrayList<>();
- try {
- // 创建 搜索请求对象
- SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
- // 构建 SearchSourceBuilder 查询条件构建器 所有的查询条件都需要给它
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- // 设置查询条件
- // 构建多条件拼接对象
- BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
- // 拼接条件 文章标题 分词
- if (StringUtils.isNotBlank(articleRequest.getTitle())) {
- boolQueryBuilder.must(QueryBuilders.matchQuery("title", articleRequest.getTitle()));
- }
- // 发布人
- if (articleRequest.getCreateBy() != null) {
- boolQueryBuilder.must(QueryBuilders.matchQuery("createBy", articleRequest.getCreateBy()));
- }
- // 创建时间 区间
- if (articleRequest.getBeginTime() != null) {
- boolQueryBuilder.must(QueryBuilders.rangeQuery("createTime").gte(articleRequest.getBeginTime().getTime()));
- }
- if (articleRequest.getEndTime() != null) {
- boolQueryBuilder.must(QueryBuilders.rangeQuery("createTime").lte(articleRequest.getEndTime().getTime()));
- }
- // 将拼接好的 条件 给 条件构建器 SearchSourceBuilder ******
- searchSourceBuilder.query(boolQueryBuilder);
- // 分页
- // 跳过几条数据 需要公式计算
- searchSourceBuilder.from((articleRequest.getPageNum() - 1) * articleRequest.getPageSize());
- searchSourceBuilder.size(articleRequest.getPageSize());
- // 排序
- searchSourceBuilder.sort("createTime", SortOrder.DESC);
- // 高亮
- searchSourceBuilder.highlighter(new HighlightBuilder().field("title").preTags("<span style="color:red;">").postTags("</span>"));
- // 发sing请求之前一定需要将条件构建器 给 searchRequest ******
- searchRequest.source(searchSourceBuilder);
- // 发送请求
- SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
- // 获取 响应的数据 【命中】
- SearchHits hits = searchResponse.getHits();
- // 获取总记录数
- total = hits.getTotalHits().value;
- // 获取结果集
- SearchHit[] searchHits = hits.getHits();
- // 遍历获取每一条结果
- for (SearchHit searchHit : searchHits) {
- // 以JSON的形式获取结果
- String sourceAsString = searchHit.getSourceAsString();
- // 反序列化
- ArticleResponse articleResponse = JSONObject.parseObject(sourceAsString, ArticleResponse.class);
- // 获取高亮字段
- Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
- if (highlightFields != null) {
- HighlightField highlightField = highlightFields.get("title");
- // 获取高亮内容
- if (highlightField != null) {
- // 获取高亮碎片
- Text[] fragments = highlightField.getFragments();
- String str = "";
- for (Text fragment : fragments) {
- str += fragment;
- }
- // 替换
- articleResponse.setTitle(str);
- }
- }
- // 添加到结果集
- articleResponseList.add(articleResponse);
- }
- } catch (Exception e) {
- log.error("搜索文章数据异常,请求参数:{},异常信息是:{}", JSONObject.toJSONString(articleRequest), e);
- }
- // 返回结果
- return PageResult.toResult(total, articleResponseList);
- }
复制代码 添加
- @Override
- public void add(ArticleResponse articleResponse) {
- try {
- // 创建IndexRequest
- IndexRequest indexRequest = new IndexRequest(INDEX_NAME);
- // 设置文档id 以数据库的主键作为文档id
- indexRequest.id(articleResponse.getId() + "");
- // articleResponse.setId(null);
- SimplePropertyPreFilter simplePropertyPreFilter = new SimplePropertyPreFilter();
- simplePropertyPreFilter.getExcludes().add("id");
- // 设置添加的数据
- indexRequest.source(JSONObject.toJSONString(articleResponse, simplePropertyPreFilter), XContentType.JSON);
- // 执行添加请求
- restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
- } catch (IOException e) {
- log.error("添加数据到ES异常,请求参数:{},异常信息是:{}", JSONObject.toJSONString(articleResponse), e);
- }
- }
复制代码 修改
- @Override
- public void update(ArticleResponse articleResponse) {
- try {
- // 创建 UpdateRequest
- UpdateRequest updateRequest = new UpdateRequest(INDEX_NAME, articleResponse.getId() + "");
- // 设置修改的数据 局部修改
- updateRequest.doc(JSONObject.toJSONString(articleResponse), XContentType.JSON);
- // 执行修改
- restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
- } catch (IOException e) {
- log.error("修改ES异常,请求参数:{},异常信息是:{}", JSONObject.toJSONString(articleResponse), e);
- }
- }
复制代码 删除
- @Override
- public void delete(String id) {
- try {
- // 创建DeleteRequest
- DeleteRequest deleteRequest = new DeleteRequest(INDEX_NAME, id);
- // 执行删除请求
- restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
- } catch (IOException e) {
- }
- }
复制代码 根据ID查询
- @Override
- public ArticleResponse findById(String id) {
- try {
- //
- GetRequest getRequest = new GetRequest(INDEX_NAME, id);
- // 执行请求
- GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
- // 判断是否查询到
- if (getResponse.isExists()) {
- // 获取数据 JSON字符串
- String sourceAsString = getResponse.getSourceAsString();
- // 反序列化成 对象
- return JSONObject.parseObject(sourceAsString, ArticleResponse.class);
- }
- } catch (IOException e) {
- }
- return null;
- }
复制代码 批量添加
- @Override
- public void batchAdd(List<ArticleResponse> articleResponses) {
- try {
- BulkRequest bulkRequest = new BulkRequest();
- // 遍历
- articleResponses.forEach(articleResponse -> {
- bulkRequest.add(new IndexRequest(INDEX_NAME)
- .id(articleResponse.getId() + "")
- .source(JSONObject.toJSONString(articleResponse), XContentType.JSON));
- });
- // 发送请求
- restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
- } catch (IOException e) {
- }
- }
复制代码 增量同步 两种方案
1.代码实现
- /**
- * 删除
- */
- @Override
- public void delEs() {
- try {
- //创建条件删除对象
- DeleteByQueryRequest byQueryRequest = new DeleteByQueryRequest(INDEX_NAME);
- //设置删除条件
- byQueryRequest.setQuery(QueryBuilders.matchAllQuery());
- //发送请求
- restHighLevelClient.deleteByQuery(byQueryRequest, RequestOptions.DEFAULT);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- /**
- 1. 添加
- 2. @param goods
- */
- @Override
- public void beach(List<Goods> goods) {
- try {
- BulkRequest request = new BulkRequest();
- goods.forEach(goods1 -> {
- request.add(new IndexRequest(INDEX_NAME).
- id(goods1.getGoodsId()+"").
- source(JSONObject.toJSONString(goods1), XContentType.JSON));
- });
- restHighLevelClient.bulk(request,RequestOptions.DEFAULT);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
复制代码- 定时器 一分钟执行一次
- @Autowired
- private EsFeignService esFeignService;
- @Autowired
- private EsService esService;
- @Scheduled(cron = "0 0/1 * * * ?")
- public void SyncBlog2EsPerMinute(){
- //查出所有商品数据
- List<Goods> list = esFeignService.list();
- if(!list.isEmpty()){
- //删除es数据
- esService.delEs();
- //添加最新数据
- esService.beach(list);
- }
- }
复制代码 2.logstash实现 (版本要和你的es版本同等,我这里用得是7.17.0)
在bin目录下有一个 conf文件
这里定时使命多长时间执行一次
这个是映射
修改完成后在当前目录下进入终端
可以直接在这里输入cmd直接进入这个目录
输入这个下令等候执行就ok了 logstash.bat -f logstash.conf
这是乐成的示例
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |