项目实战:ES的增加数据和查询数据

背景

最近需要做一个有关查询聊天记录的功能,通过资料了解到使用ES可以方便我们快速查询内容。自己进行ES框架的搭建,感兴趣的可以看博客进行学习:https://blog.csdn.net/weixin_45309155/article/details/132686375?spm=1001.2014.3001.5501
ES搭建好之后就是应用了,下面就先总结一下关于最近在项目中的应用。

在ES中增加数据

因为在要在项目中进行增加数据。查阅资料需要有索引。所以要先进行索引的创建。这部分是先在postman中调用接口进行创建索引。

新建索引

在postman中,使用接口:

http://116.XXXXXX:9200/chat

IP地址+端口号+你需要创建的索引名称。请求类型为put
在这里插入图片描述
如果创建成功之后就会显示如下代码:

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "chat"
}

删除索引

在postman中使用接口:

http://116.XXXXXX:9200/chat

P地址+端口号+你需要删除的索引名称。请求类型为delete
如果删除成功会显示代码:

{
    "acknowledged": true
}

这里需要注意的是:当你删除索引的时候,如果该索引下有数据内容的话,会把对应的数据进行删除。

在ES中查询数据

在postman中使用接口:

http://116.XXXXX:9200/chat/_search

在这里插入图片描述
如果有内容,就可以看到相应插入的数据

查询数据总数量

在postman中使用接口

http://116.XXXXX:9200/chat/_count

请求类型为get
请求体为:

{
  "query": {
    "match_all": {}
  }
}

在这里插入图片描述
如果有数据的话会显示数据的总数;
在这里插入图片描述

项目具体使用(实战)

引入依赖

<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client-sniffer</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>

方式一:使用配置类连接对应的es服务器

创建配置类

@Configuration
public class ElasticSearchClientConfig {
    @Bean
    public RestClientBuilder restClientBuilder() {
    RestHighLevelClient restHighLevelClient =new RestHighLevelClient (RestClient.builder(new HttpHost("ES的ip地址",9200,"http")));
        return client;
    }
}

编写业务逻辑----根据关键字查询相关的聊天内容

这里需要入参:需要查询的关键字keyword

public List<Map<String, Object>> search(String userId,String fileName, String keyword) throws IOException {
        ArrayList<Map<String, Object>> resultList = new ArrayList<>();
        try {
            if (userId.isEmpty()||fileName.isEmpty()||keyword.isEmpty()){
                throw new Exception();
            }
            // 构建查询条件
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

            // 匹配receiver或sender为userId的文档
            boolQueryBuilder.should(QueryBuilders.termQuery("receiver", userId));
            boolQueryBuilder.should(QueryBuilders.termQuery("sender", userId));

            // 部分匹配content字段的关键字
            MatchQueryBuilder contentQueryBuilder = QueryBuilders.matchQuery(fileName, keyword);
            boolQueryBuilder.must(contentQueryBuilder);

            // 创建搜索请求,chat为索引值
            SearchRequest searchRequest = new SearchRequest("chat");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(boolQueryBuilder);
            searchRequest.source(searchSourceBuilder);

            // 执行搜索
            SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

            // 解析结果
            for (SearchHit documentFields : searchResponse.getHits().getHits()) {
                Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();
                Object  receiver =  sourceAsMap.get("receiver");
                Object  sender =  sourceAsMap.get("sender");

                if ((receiver != null && receiver.toString().equals(userId)) || (sender != null && sender.toString().equals(userId))) {
                    resultList.add(sourceAsMap);
                }
            }
            return resultList;
        }catch (Exception e){
            e.printStackTrace();
        }
       return resultList;
    }

在ES中插入数据

public Boolean parseContent() throws IOException {
       List<SendMessagePojo> list= queryContent();//需要插入的内容
        BulkRequest bulkRequest = new BulkRequest();
        for (int i = 0; i < list.size(); i++) {
             bulkRequest.add(new IndexRequest("chat").source(JSONObject.toJSONString(list.get(i)), XContentType.JSON));
        }
        try {
            BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
            return !bulk.hasFailures();
        }catch (Exception e){
            e.printStackTrace();
        }

        return null;
    }

插入到es时,不需要提前定义列名,当你什么实体的类型的值时,就可以直接按照你的实体名称进行存储。

上面两段业务代码可以根据自己的业务代码进行修改调整。

总结提升

Elasticsearch (ES) 是一个分布式搜索和分析引擎,它具有强大的实时数据处理能力。以下是关于ES增加和删除业务场景的总结,旨在提升您对ES的理解。

ES的增加业务场景

  1. 数据索引和搜索
    ES的主要用途之一是将数据索引到Elasticsearch集群中,并使用其强大的搜索功能来查询和检索数据。以下是一些使用ES进行数据索引和搜索的业务场景:

电子商务网站:将商品信息索引并快速搜索,实现商品的全文搜索、过滤和排序。
新闻网站:将新闻文章索引到ES中,通过关键字搜索、相关性排序等功能提供高效的全文搜索服务。
日志分析:将日志数据索引到ES,利用其强大的搜索和聚合功能来实时分析和监控系统日志。
社交媒体分析:将社交媒体数据索引到ES,通过搜索和聚合功能来分析用户行为、趋势和情感分析等。
2. 实时数据处理
ES对实时数据处理的支持使其成为处理大规模实时数据流的理想选择。以下是一些使用ES进行实时数据处理的业务场景:

监控和告警系统:将实时产生的监控指标和日志数据索引到ES中,通过实时搜索和聚合功能进行告警和异常检测。
实时日志分析:将实时产生的日志数据索引到ES中,通过搜索和聚合功能快速分析应用程序或系统的实时日志。
事件处理和通知:将实时事件索引到ES中,通过实时搜索和推送功能来处理事件并发送通知。
3. 数据聚合和分析
ES提供了强大的聚合和分析功能,可以对大规模数据集进行高效的数据挖掘和分析。以下是一些使用ES进行数据聚合和分析的业务场景:

业务智能报表:利用ES的聚合功能,对大规模数据进行聚合和汇总,生成业务智能报表和可视化图表。
用户行为分析:通过对用户行为数据的聚合和分析,提取用户喜好、兴趣和行为模式等信息,用于个性化推荐和营销策略。
数据探索和发现:通过搜索和聚合功能,对数据集进行探索和发现,挖掘数据中的潜在模式、关联性和趋势。
ES的删除业务场景

  1. 数据清理和过期数据删除
    由于ES的索引是基于倒排索引的,对于长时间未更新的数据,可能会占用不必要的磁盘空间和内存资源。以下是一些使用ES进行数据清理和过期数据删除的业务场景:

日志数据清理:定期删除旧的日志数据,以保持ES集群的性能和存储效率。
缓存数据刷新:根据数据的过期时间,在ES中实现缓存数据的自动刷新和删除。
2. 数据保护和隐私合规
根据隐私法规和合规要求,需要定期删除或销毁某些类型的数据。以下是一些使用ES进行数据保护和隐私合规的业务场景:

用户数据删除:根据用户的请求或特定时间段,删除包含敏感信息的用户数据。
合规数据保留:根据法律法规的要求,对特定类型的数据进行保留期限管理和数据销毁操作。
总结来说,ES的增加和删除功能可以应用于各种业务场景,包括数据索引和搜索、实时数据处理、数据聚合和分析,以及数据清理和隐私合规。通过充分利用ES的功能,可以提升数据的可发现性、实时性和分析能力,从而为业务带来更大的价值。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
### 回答1: 这个项目实战的目标是使用Java版本的Spark将Hive表的数据写入Elasticsearch。具体步骤如下: 1. 首先,需要在Spark中创建一个JavaSparkContext对象,并且设置相关的配置,比如Elasticsearch的地址和端口号等。 2. 接下来,需要使用HiveContext对象来读取Hive表的数据。可以使用HiveContext的sql方法来执行Hive SQL语句,或者使用HiveContext的table方法来读取Hive表的数据。 3. 读取Hive表的数据后,需要将数据转换成Elasticsearch的格式。可以使用JavaRDD的map方法来实现数据的转换。 4. 转换完成后,需要将数据写入Elasticsearch。可以使用JavaRDD的foreachPartition方法来实现数据的批量写入。 5. 最后,记得关闭JavaSparkContext对象。 以上就是使用Java版本的Spark将Hive表的数据写入Elasticsearch的步骤。需要注意的是,具体实现过程中还需要考虑一些细节问题,比如数据类型的转换、数据的去重等。 ### 回答2: 在实现Spark将Hive表的数据写入Elasticsearch的过程中,首先需要搭建好相关的环境,包括Hadoop、Hive和Elasticsearch等。然后,根据Spark的API接口,可以编写相关的Java代码来实现将Hive表的数据写入Elasticsearch的操作。 具体实现步骤如下: 1. 导入相关依赖:在Maven项目中,需要添加以下依赖: ```xml <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_${scalaVersion}</artifactId> <version>${spark.version}</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_${scalaVersion}</artifactId> <version>${spark.version}</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch-spark-20_2.11</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>${hive.version}</version> </dependency> ``` 其中,${scalaVersion}、${spark.version}、${elasticsearch.version}和${hive.version}需要根据实际情况进行替换。 2. 初始化SparkConf和SparkSession对象:在Java代码中,需要先初始化SparkConf和SparkSession对象: ```java SparkConf conf = new SparkConf().setAppName("Spark-Hive-Elasticsearch"); SparkSession spark = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate(); ``` 其中,setAppName用于设置Spark应用程序的名称,getOrCreate用于获取一个已有的Spark或创建一个新的Spark。 3. 读取Hive表的数据:可以使用SparkSession的read方法读取Hive表的数据,如下所示: ```java DataFrame df = spark.read().table("mytable"); ``` 其中,mytable为Hive表的名称。 4. 配置Elasticsearch索引:在将Hive表的数据写入Elasticsearch时,需要配置相关的索引,如下所示: ```java Map<String, String> esConfig = new HashMap<>(); esConfig.put("es.nodes", "localhost"); esConfig.put("es.port", "9200"); esConfig.put("es.resource", "myindex/mytype"); ``` 其中,es.nodeses.port用于配置Elasticsearch的地址和端口,es.resource用于指定Elasticsearch的索引名称和类型名称。 5. 将Hive表的数据写入Elasticsearch:可以使用DataFrame的write方法将Hive表的数据写入Elasticsearch,如下所示: ```java df.write().format("org.elasticsearch.spark.sql").mode(SaveMode.Append).options(esConfig).save(); ``` 其中,format指定了保存的格式为Elasticsearch格式,mode指定了保存的模式为Append,options指定了保存的配置项。 通过上述步骤,即可实现Spark将Hive表的数据写入Elasticsearch的操作。当然,在实际应用过程中,还需要根据具体需求进行相关的优化和调整。 ### 回答3: 这个项目实战的主要目的是将Hive表的数据写入到Elasticsearch。Hive是Hadoop中的数据仓库,而Elasticsearch则是一个高性能的搜索和分析引擎。将这两个系统结合起来可以实现更好的数据分析和可视化。 在开始实现之前,需要先搭建好Hadoop和Elasticsearch环境,并且熟悉Java编程语言和Spark框架。接下来,可以按照以下步骤进行实现。 第一步:配置Maven项目并添加Spark和Elasticsearch的依赖库。在pom.xml文件中添加以下代码: ``` <!-- Spark --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.5</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.4.5</version> </dependency> <!-- Elasticsearch --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch-spark-20_2.11</artifactId> <version>7.6.2</version> </dependency> ``` 第二步:编写代码读取Hive表的数据。使用Spark SQL读取Hive表数据并将其转换为DataFrame,例如: ``` String tableName = "hive_table_name"; Dataset<Row> df = sparkSession.table(tableName); ``` 第三步:将DataFrame中的数据写入Elasticsearch。使用Elasticsearch Spark库提供的API来将数据写入Elasticsearch,例如: ``` // 配置Elasticsearch参数 Map<String, String> esConfigs = new HashMap<>(); esConfigs.put("es.nodes", "localhost"); esConfigs.put("es.port", "9200"); esConfigs.put("es.mapping.id", "id"); // 写入数据 df.write().format("org.elasticsearch.spark.sql") .options(esConfigs).mode("overwrite") .save("index_name/document_type"); ``` 最后一步:运行代码并验证数据是否已经成功写入Elasticsearch。可以使用Kibana界面进行数据可视化展示和分析。 通过以上步骤,就可以成功实现将Hive表的数据写入Elasticsearch的功能。这个项目实战可以帮助开发人员更好地理解和应用Spark和Elasticsearch技术,并且提升数据分析和可视化的能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷艳爽faye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值