汉邦未来网站建设大数据营销案例
文章目录
- 第一步,导入jar包,注意这里的jar包版本可能和你导入的不一致,所以需要修改
- 第二步,编写配置类
- 第三步,填写yml
- 第四步,编写util类
- 第五步,编写controller类
- 第六步,测试即可
第一步,导入jar包,注意这里的jar包版本可能和你导入的不一致,所以需要修改
<properties>
<properties><java.version>1.8</java.version><elasticsearch.version>7.6.2</elasticsearch.version>
</properties>
<!-- elasticsearch -->
<!--es客户端-->
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.6.2</version>
</dependency><!--springboot的elasticsearch服务-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
第二步,编写配置类
这段代码是一个基本的 Elasticsearch Java 客户端的配置类,用于创建一个 RestHighLevelClient 实例。
其中 RestHighLevelClient 是 Elasticsearch Java 客户端的高级别别名,是基于 LowLevelClient 之上的封装,提供了一些更加方便的方法和功能。
在这段代码中,使用了 @Value 注解来注入三个配置项,包括 hostname,port 和 scheme。这三个配置项分别表示 Elasticsearch 服务器的主机名或 IP 地址,端口号和通信协议。然后使用RestClient.builder() 方法来创建一个 RestClient 实例,传入 Elasticsearch 服务器的地址和端口号,最后将 RestClient 实例传入 RestHighLevelClient 的构造函数中,即可创建一个 RestHighLevelClient 实例。
需要注意的是,这段代码中的 RestHighLevelClient 实例是一个单例对象,只需要在应用程序启动时创建一次即可,因此这个类应该被配置为一个 Spring Bean,以便在需要时注入到其他类中使用。
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticSearchClientConfig {@Value("${elasticSearch.hostname}")private String hostname;@Value("${elasticSearch.port}")private Integer port;@Value("${elasticSearch.scheme}")private String scheme;@Beanpublic RestHighLevelClient restHighLevelClient(){return new RestHighLevelClient(RestClient.builder(new HttpHost(hostname,port,scheme)));}
}
第三步,填写yml
elasticSearch:hostname: 127.0.0.1port: 9200scheme: http
第四步,编写util类
这是一个Java类,实现了Elasticsearch API的一些基本功能。它定义了创建、检查是否存在、删除索引、添加、修改和删除文档以及搜索文档的方法。该类使用Elasticsearch API的RESTful客户端来执行这些操作。
以下是每种方法的概述:
- createIndex(字符串索引):使用给定的名称创建一个索引。
- existIndex(字符串索引):检查是否存在具有给定名称的索引。
- deleteIndex(字符串索引):删除具有给定名称的索引。
- addDocument(动态动态,字符串索引):使用给定的名称将文档添加到索引中。
- existDocument(字符串索引,字符串文档):检查具有给定ID的文档是否存在于具有给定名称的索引中。
- getDocument(字符串索引,字符串文档):从具有给定名称的索引中检索具有给定ID的文档。
- updateDocument(动态动态、字符串索引、字符串文档):在具有给定名称的索引中更新具有给定ID的文档。
- deleteDocument(字符串索引,字符串文档):从具有给定名称的索引中删除具有给定ID的文档。
- bulkAddDocument(List<Dynamic>dynamics):在一个批次中将多个具有给定名称的文档添加到索引中。
- searchDocument(字符串索引):根据搜索查询在索引中搜索具有给定名称的文档。
import com.alibaba.fastjson.JSON;
import com.wangfugui.apprentice.dao.domain.Dynamic;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;/*** @since JDK 1.8.0*/
@Component
@Slf4j
public class ElasticSearchUtil {@Autowired@Qualifier("restHighLevelClient")private RestHighLevelClient client;//索引的创建public CreateIndexResponse createIndex(String index) throws IOException {//1.创建索引的请求CreateIndexRequest request = new CreateIndexRequest(index);//2客户端执行请求,请求后获得响应CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);log.info("索引的创建{}", response);return response;}//索引是否存在public Boolean existIndex(String index) throws IOException {//1.创建索引的请求GetIndexRequest request = new GetIndexRequest(index);//2客户端执行请求,请求后获得响应boolean exist = client.indices().exists(request, RequestOptions.DEFAULT);log.info("索引是否存在-----" + exist);return exist;}//删除索引public Boolean deleteIndex(String index) throws IOException {DeleteIndexRequest request = new DeleteIndexRequest(index);AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);log.info("删除索引--------" + delete.isAcknowledged());return delete.isAcknowledged();}//添加文档public IndexResponse addDocument(Dynamic dynamic, String index) throws IOException {IndexRequest request = new IndexRequest(index);//设置超时时间request.timeout("1s");//将数据放到json字符串request.source(JSON.toJSONString(dynamic), XContentType.JSON);//发送请求IndexResponse response = client.index(request, RequestOptions.DEFAULT);log.info("添加文档-------" + response.toString());log.info("添加文档-------" + response.status());return response;}//文档是否存在public Boolean existDocument(String index, String documents) throws IOException {//文档的 没有indexGetRequest request = new GetRequest(index, documents);//没有indices()了boolean exist = client.exists(request, RequestOptions.DEFAULT);log.info("文档是否存在-----" + exist);return exist;}//获取文档public GetResponse getDocument(String index, String documents) throws IOException {GetRequest request = new GetRequest(index, documents);GetResponse response = client.get(request, RequestOptions.DEFAULT);log.info("获取文档-----" + response.getSourceAsString());log.info("获取文档-----" + response);return response;}//修改文档public UpdateResponse updateDocument(Dynamic dynamic, String index, String documents) throws IOException {//修改是id为1的UpdateRequest request = new UpdateRequest(index, documents);request.timeout("1s");request.doc(JSON.toJSONString(dynamic), XContentType.JSON);UpdateResponse response = client.update(request, RequestOptions.DEFAULT);log.info("修改文档-----" + response);log.info("修改文档-----" + response.status());return response;}//删除文档public RestStatus deleteDocument(String index, String documents) throws IOException {DeleteRequest request = new DeleteRequest(index, documents);request.timeout("1s");DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);log.info("删除文档------" + response.status());return response.status();}//批量添加文档public BulkResponse bulkAddDocument(List<Dynamic> dynamics) throws IOException {//批量操作的RequestBulkRequest request = new BulkRequest();request.timeout("1s");//批量处理请求for (int i = 0; i < dynamics.size(); i++) {request.add(new IndexRequest("lisen_index").id("" + (i + 1)).source(JSON.toJSONString(dynamics.get(i)), XContentType.JSON));}BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);//response.hasFailures()是否是失败的log.info("批量添加文档-----" + response.hasFailures());// 结果:false为成功 true为失败return response;}//查询文档public SearchResponse searchDocument(String index) throws IOException {SearchRequest request = new SearchRequest(index);//构建搜索条件SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//设置了高亮sourceBuilder.highlighter();//term name为cyx1的TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "cyx1");sourceBuilder.query(termQueryBuilder);sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));request.source(sourceBuilder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);log.info("查询文档-----" + JSON.toJSONString(response.getHits()));log.info("=====================");for (SearchHit documentFields : response.getHits().getHits()) {log.info("查询文档--遍历参数--" + documentFields.getSourceAsMap());}return response;}public IndexResponse addDocumentId(Dynamic dynamic, String index, String id) throws IOException {IndexRequest request = new IndexRequest(index);//设置超时时间request.id(id);//将数据放到json字符串request.source(JSON.toJSONString(dynamic), XContentType.JSON);//发送请求IndexResponse response = client.index(request, RequestOptions.DEFAULT);log.info("添加文档-------" + response.toString());log.info("添加文档-------" + response.status());return response;}
}
第五步,编写controller类
这是一个Java类,实现了Elasticsearch API的一些基本功能。它定义了用于创建、检查存在性、删除索引、添加、修改和删除文档,以及搜索文档的方法。该类使用Elasticsearch API的RESTful客户端执行这些操作。
以下是每个方法的概述:
- createIndex(String index) 创建索引的方法。
- existIndex(String index) 检查给定名称的索引是否存在的方法。
- deleteIndex(String index) 删除给定名称的索引的方法。
- addDocument(Dynamic dynamic, String index) 将文档添加到给定名称的索引的方法。
- existDocument(String index, String documents) 检查给定名称的索引中是否存在具有给定ID的文档的方法。
- getDocument(String index, String documents) 从给定名称的索引中检索具有给定ID的文档的方法。
- updateDocument(Dynamic dynamic, String index, String documents) 在给定名称的索引中更新具有给定ID的文档的方法。
- deleteDocument(String index, String documents) 从给定名称的索引中删除具有给定ID的文档的方法。
- bulkAddDocument(List dynamics) 在单个批处理中将多个文档添加到给定名称的索引的方法。
- searchDocument(String index) 基于搜索查询在给定名称的索引中搜索文档的方法。
import com.wangfugui.apprentice.common.util.ElasticSearchUtil;
import com.wangfugui.apprentice.common.util.ResponseUtils;
import com.wangfugui.apprentice.dao.domain.Dynamic;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.util.List;/*** @since JDK 1.8.0*/
@RestController
@RequestMapping("/elasticSearch")
@Api(tags = "elasticSearch操作")
public class ElasticSearchController {@Autowiredprivate ElasticSearchUtil elasticSearchUtil;/**索引的创建*/@PostMapping("/createIndex")@ApiOperation("索引的创建")public ResponseUtils createIndex(@RequestParam String index) throws IOException {return ResponseUtils.success(elasticSearchUtil.createIndex(index));}/**索引是否存在*/@GetMapping("/existIndex")@ApiOperation("索引是否存在")public ResponseUtils existIndex(@RequestParam String index) throws IOException {return ResponseUtils.success(elasticSearchUtil.existIndex(index));}/**删除索引*/@DeleteMapping("/deleteIndex")@ApiOperation("删除索引")public ResponseUtils deleteIndex(@RequestParam String index) throws IOException {return ResponseUtils.success(elasticSearchUtil.deleteIndex(index));}/**添加文档*/@PostMapping("/addDocument")@ApiOperation("添加文档随机id")public ResponseUtils addDocument(@RequestBody Dynamic dynamic, @RequestParam String index) throws IOException {return ResponseUtils.success(elasticSearchUtil.addDocument(dynamic,index));}/**添加文档*/@PostMapping("/addDocument")@ApiOperation("添加文档自定义id")public ResponseUtils addDocumentId(@RequestBody Dynamic dynamic, @RequestParam String index,@RequestParam String id) throws IOException {return ResponseUtils.success(elasticSearchUtil.addDocumentId(dynamic,index,id));}/**文档是否存在*/@GetMapping("/existDocument")@ApiOperation("文档是否存在")public ResponseUtils existDocument(@RequestParam String index, @RequestParam String documents) throws IOException {return ResponseUtils.success(elasticSearchUtil.existDocument(index,documents));}/**获取文档*/@GetMapping("/getDocument")@ApiOperation("获取文档")public ResponseUtils getDocument(@RequestParam String index, @RequestParam String documents) throws IOException {return ResponseUtils.success(elasticSearchUtil.getDocument(index,documents));}/**修改文档*/@ApiOperation("修改文档")@PutMapping("/updateDocument")public ResponseUtils updateDocument(@RequestBody Dynamic dynamic, @RequestParam String index, @RequestParam String documents) throws IOException {return ResponseUtils.success(elasticSearchUtil.updateDocument(dynamic,index,documents));}/**删除文档*/@ApiOperation("删除文档")@DeleteMapping("/deleteDocument")public ResponseUtils deleteDocument(@RequestParam String index, @RequestParam String documents) throws IOException {return ResponseUtils.success(elasticSearchUtil.deleteDocument(index,documents));}/**批量添加文档*/@ApiOperation("批量添加文档")@PostMapping("/bulkAddDocument")public ResponseUtils bulkAddDocument(@RequestBody List<Dynamic> dynamics) throws IOException {return ResponseUtils.success(elasticSearchUtil.bulkAddDocument(dynamics));}/**查询文档*/@ApiOperation("查询文档")@GetMapping("/searchDocument")public ResponseUtils searchDocument(@RequestParam String index) throws IOException {return ResponseUtils.success(elasticSearchUtil.searchDocument(index));}}
第六步,测试即可
成功!!