丽江市住房建设局网站,免费主题wordpress,北京网页制作公司物美价廉,石景山做网站的公司1 java操作ES方式
1.1 操作ES 9300端口(TCP) 但开发中不在9300进行操作
ES集群节点通信使用的也是9300端口如果通过9300操作ES#xff0c;需要与ES建立长连接 可通过引入spring-data-elasticsearch:transport-api.jar不在9300操作原因#xff1a;1.springboot版本不同需要与ES建立长连接 可通过引入spring-data-elasticsearch:transport-api.jar不在9300操作原因1.springboot版本不同transport-api.jar不同不能适配ES版本2.官方在7.x版本已经不建议在9300操作ES8以后会废弃ES通过9300操作的jar包1.2 操作ES 9200端口(HTTP) 优选Elasticsearch-Rest-Client
通过9200对ES发送Http请求就可以了
1.使用第三方JestClient操作ES更新慢
2.RestTemplate、HttpClient、OkHttp发送HTTP请求但如果操作ES一些DSL语句需要自己封装麻烦
3.Elasticsearch-Rest-Clientelasticsearch-rest-high-level-client官方RestClient封装了ES操作API层次分明上手简单2 整合
2.1引入elasticsearch-rest-high-level-client依赖
!--elasticsearch--
dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion7.4.2/version
/dependency刷新Maven 会发现elasticsearch和elasticsearch-rest-client版本是7.17.4并不是7.4.2 原因是因为springboot对ES版本做了管理当前springboot默认整合spring-data-elasticsearch操作ES
修改版本问题
如果使用Maven进行一个直接或间接继承spring-boot-dependencies比如spring-boot-starter-parent的构建并想覆盖一个特定的
第三方依赖版本可以添加properties标签并重写第三方依赖版本propertieselasticsearch.version7.4.2/elasticsearch.version
/properties如果使用scopeimport/scope将spring-boot-dependencies添加到自己的dependencyManagement片段
那么必须重新定义artifact而不是重写第三方依赖版本dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion2.7.3/versiontypepom/typescopeimport/scope/dependencydependencygroupIdorg.elasticsearch/groupIdartifactIdelasticsearch/artifactIdversion7.4.2/version/dependencydependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-client/artifactIdversion7.4.2/version/dependency/dependencies
/dependencyManagement2.2 添加ES配置
Configuration
public class ElasticsearchConfig {/*** 配置请求选项* 参考https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.4/java-rest-low-usage-requests.html#java-rest-low-usage-request-options*/public static final RequestOptions COMMON_OPTIONS;static {RequestOptions.Builder builder RequestOptions.DEFAULT.toBuilder();// builder.addHeader(Authorization, Bearer TOKEN);// builder.setHttpAsyncResponseConsumerFactory(// new HttpAsyncResponseConsumerFactory// .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));COMMON_OPTIONS builder.build();}Beanpublic RestHighLevelClient esRestClient() {
// RestHighLevelClient highLevelClient new RestHighLevelClient(RestClient.builder(new HttpHost(192.168.179.101, 9200, Http),
// new HttpHost(192.168.179.101, 9201, Http)));RestHighLevelClient highLevelClient new RestHighLevelClient(RestClient.builder(new HttpHost(192.168.179.101, 9200, Http)));return highLevelClient;}}2.3 测试及验证整合结果
SpringBootTest
public class SearchApplicationTests {Autowiredprivate RestHighLevelClient client;DataToStringstatic class Account {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;}/*** 在new_bank中搜索address中包含mill的所有人的年龄分布以及平均薪资*/Testpublic void searchData() throws IOException {//1,创建检索请求SearchRequest searchRequest new SearchRequest();//1.1,指定检索索引searchRequest.indices(new_bank);//1.2,构造检索条件SearchSourceBuilder searchSourceBuilder new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchQuery(address, Mill));//1.2.1,按照年龄分布进行聚合TermsAggregationBuilder ageAgg AggregationBuilders.terms(ageAgg).field(age).size(10);searchSourceBuilder.aggregation(ageAgg);//1.2.2,计算平均薪资AvgAggregationBuilder avgBalance AggregationBuilders.avg(avgBalance).field(balance);searchSourceBuilder.aggregation(avgBalance);System.out.println(检索条件 searchSourceBuilder);searchRequest.source(searchSourceBuilder);//2,执行同步检索SearchResponse searchResponse client.search(searchRequest, ElasticsearchConfig.COMMON_OPTIONS);System.out.println(执行检索结果 searchResponse);//3,提取命中结果hitsSearchHits hits searchResponse.getHits();SearchHit[] hitsHits hits.getHits();for (SearchHit hitsHit : hitsHits) {String sourceAsString hitsHit.getSourceAsString();Account account JSONObject.parseObject(sourceAsString, Account.class);System.out.println(account);}//4,提取聚合信息Aggregations aggregations searchResponse.getAggregations();Terms ageAggRes aggregations.get(ageAgg);List? extends Terms.Bucket aggResBuckets ageAggRes.getBuckets();for (Terms.Bucket aggResBucket : aggResBuckets) {System.out.println(年龄 aggResBucket.getKeyAsString() 总和 aggResBucket.getDocCount());}Avg balance aggregations.get(avgBalance);System.out.println(balance.getValue());}/*** https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.4/java-rest-high-document-index.html*/Testpublic void testEsAdd() throws IOException {//指定索引IndexRequest indexRequest new IndexRequest(users);//指定idindexRequest.id(1);//封装数据User user new User();user.setUserName(张三);user.setAge(27);user.setGender(M);String jsonString JSONObject.toJSONString(user);//指定数据类型为JSONindexRequest.source(jsonString, XContentType.JSON);//执行同步操作IndexResponse index client.index(indexRequest, ElasticsearchConfig.COMMON_OPTIONS);System.out.println(index);}Dataclass User {private String userName;private String gender;private Integer age;}}kibanaGET /users/_search
{took : 1,timed_out : false,_shards : {total : 1,successful : 1,skipped : 0,failed : 0},hits : {total : {value : 1,relation : eq},max_score : 1.0,hits : [{_index : users,_type : _doc,_id : 1,_score : 1.0,_source : {age : 27,gender : M,userName : 张三}}]}
}