国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java操作elasticSearch復(fù)雜查詢以及解析數(shù)據(jù)以及索引保存數(shù)據(jù)

這篇具有很好參考價值的文章主要介紹了Java操作elasticSearch復(fù)雜查詢以及解析數(shù)據(jù)以及索引保存數(shù)據(jù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、Java操作elasticSearch復(fù)雜查詢以及解析數(shù)據(jù)

說明:基于銀行測試庫的操作

es的銀行測試庫,看一個Kibana操作 然后用java檢索解析這個數(shù)據(jù)

聚合搜索 address 中包含 mill 的所有人的年齡分布以及平均薪資

#聚合搜索 address 中包含 mill 的所有人的年齡分布以及平均薪資
GET bank/_search
{
  "query":{
    "match": {
      "address": "mill"
    }
  },
  "aggs": {
    "ageAgg": {
      "terms": {
        "field": "age",
        "size": 10
      }
    },
    "balanceAvg":{
      "avg":{
        "field": "balance"
      }
    }
  },
  "size": 0
}

以下是分解思路實現(xiàn)步驟:

1.1 拆解操作數(shù)據(jù)

#聚合搜索 address 中包含 mill 的所有人的年齡分布以及平均年齡
GET bank/_search
{
“query”:{ “match”: { “address”: “mill” }
},
“aggs”: { “ageAgg”: { “terms”: { “field”: “age”, “size”: 10 } },

“balanceAvg”:{ “avg”:{ “field”: “balance” } } }, “size”: 0 }

1.2 構(gòu)造一個查詢器 指向索引

SearchRequest searchRequest = new SearchRequest();
//指定索引
searchRequest.indices("bank");

1.3 封裝查詢條件器

//指定DSL 檢索條件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//構(gòu)造檢索條件
searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
//按照年齡只分布進(jìn)行聚合
TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
searchSourceBuilder.aggregation(ageAgg);
//計算平均薪資
AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("blance");
searchSourceBuilder.aggregation(balanceAvg);

//打印檢索條件 打印結(jié)果與Kibana核對
System.out.println("檢索條件:"+searchSourceBuilder);
檢索條件:{"query":{"match":{"address":{"query":"mill","operator":"OR","prefix_length":0,"max_expansions":50,"fuzzy_transpositions":true,"lenient":false,"zero_terms_query":"NONE","auto_generate_synonyms_phrase_query":true,"boost":1.0}}},"aggregations":{"ageAgg":{"terms":{"field":"age","size":10,"min_doc_count":1,"shard_min_doc_count":0,"show_term_doc_count_error":false,"order":[{"_count":"desc"},{"_key":"asc"}]}},"balanceAvg":{"avg":{"field":"blance"}}}}

1.4 封裝的條件器置入查詢器

searchRequest.source(searchSourceBuilder);

1.5 容器中的client調(diào)用查詢:

//執(zhí)行檢索
SearchResponse search = client.search(searchRequest, GuilimallElasticSearchConfig.COMMON_OPTIONS);

1.6 解析查詢結(jié)果

		System.out.println(search.toString());
//		Map map = JSON.parseObject(search.toString(), Map.class);
		//分析結(jié)果 查詢結(jié)構(gòu)
		SearchHits hits = search.getHits();
		SearchHit[] searchHits = hits.getHits();
		for (SearchHit hit: searchHits){
//			hit.getIndex();
//			hit.getId();
			String sourceAsString = hit.getSourceAsString();
			Accout accout = JSON.parseObject(sourceAsString, Accout.class);
			System.out.println(accout.toString());
		}
		//獲取檢索的分析信息
		Aggregations aggregations = search.getAggregations();
//		for (Aggregation aggregation : aggregations.asList()) {
//			System.out.println("當(dāng)前聚合名字:"+aggregation.getName());
//		}
		//分類聚合
		Terms ageAgg1 = aggregations.get("ageAgg");
		for (Terms.Bucket bucket : ageAgg1.getBuckets()) {
			String keyAsString = bucket.getKeyAsString();
			System.out.println("年齡:" + keyAsString + "人數(shù):"+bucket.getDocCount());
		}
		//平局值
		Avg balanceAvg1 = aggregations.get("balanceAvg");
		System.out.println("平均薪資"+ balanceAvg1.getValue());
{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":4,"relation":"eq"},"max_score":5.4032025,"hits":[{"_index":"bank","_type":"account","_id":"970","_score":5.4032025,"_source":{"account_number":970,"balance":19648,"firstname":"Forbes","lastname":"Wallace","age":28,"gender":"M","address":"990 Mill Road","employer":"Pheast","email":"forbeswallace@pheast.com","city":"Lopezo","state":"AK"}},{"_index":"bank","_type":"account","_id":"136","_score":5.4032025,"_source":{"account_number":136,"balance":45801,"firstname":"Winnie","lastname":"Holland","age":38,"gender":"M","address":"198 Mill Lane","employer":"Neteria","email":"winnieholland@neteria.com","city":"Urie","state":"IL"}},{"_index":"bank","_type":"account","_id":"345","_score":5.4032025,"_source":{"account_number":345,"balance":9812,"firstname":"Parker","lastname":"Hines","age":38,"gender":"M","address":"715 Mill Avenue","employer":"Baluba","email":"parkerhines@baluba.com","city":"Blackgum","state":"KY"}},{"_index":"bank","_type":"account","_id":"472","_score":5.4032025,"_source":{"account_number":472,"balance":25571,"firstname":"Lee","lastname":"Long","age":32,"gender":"F","address":"288 Mill Street","employer":"Comverges","email":"leelong@comverges.com","city":"Movico","state":"MT"}}]},"aggregations":{"lterms#ageAgg":{"doc_count_error_upper_bound":0,"sum_other_doc_count":0,"buckets":[{"key":38,"doc_count":2},{"key":28,"doc_count":1},{"key":32,"doc_count":1}]},"avg#balanceAvg":{"value":null}}}
GulimallSearchApplicationTests.Accout(account_number=970, balance=19648, firstname=Forbes, lastname=Wallace, age=28, gender=M, address=990 Mill Road, employer=Pheast, email=forbeswallace@pheast.com, city=Lopezo, state=AK)
GulimallSearchApplicationTests.Accout(account_number=136, balance=45801, firstname=Winnie, lastname=Holland, age=38, gender=M, address=198 Mill Lane, employer=Neteria, email=winnieholland@neteria.com, city=Urie, state=IL)
GulimallSearchApplicationTests.Accout(account_number=345, balance=9812, firstname=Parker, lastname=Hines, age=38, gender=M, address=715 Mill Avenue, employer=Baluba, email=parkerhines@baluba.com, city=Blackgum, state=KY)
GulimallSearchApplicationTests.Accout(account_number=472, balance=25571, firstname=Lee, lastname=Long, age=32, gender=F, address=288 Mill Street, employer=Comverges, email=leelong@comverges.com, city=Movico, state=MT)
年齡:38人數(shù):2
年齡:28人數(shù):1
年齡:32人數(shù):1
平均薪資25208.0

1.7 打印逐條記錄時,可以把結(jié)構(gòu)封裝成一個model 借助一下:json.cn

es實現(xiàn)復(fù)雜查詢,java,elasticsearch,開發(fā)語言
es實現(xiàn)復(fù)雜查詢,java,elasticsearch,開發(fā)語言

1.8 完整操作:

	@ToString
		@Data
		static class Accout {

			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;
		}

	@Test
	public void searchData() throws IOException {
		SearchRequest searchRequest = new SearchRequest();
		//指定索引
		searchRequest.indices("bank");
		//指定DSL 檢索條件
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
		//構(gòu)造檢索條件

	/**
	 #聚合搜索 address 中包含 mill 的所有人的年齡分布以及平均年齡
	 GET bank/_search
	 {
	 "query":{ "match": { "address": "mill" }
	 },
	 "aggs": { "ageAgg": { "terms": { "field": "age", "size": 10 } },
	 "balanceAvg":{ "avg":{ "field": "balance" } } }, "size": 0 }
	 */

//		searchSourceBuilder.aggregation();
//		searchSourceBuilder.from();
//		searchSourceBuilder.size();
		searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
		//按照年齡只分布進(jìn)行聚合
		TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
		searchSourceBuilder.aggregation(ageAgg);
		//計算平均薪資
		AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");
		searchSourceBuilder.aggregation(balanceAvg);

		//打印檢索條件
 		System.out.println("檢索條件:"+searchSourceBuilder);


		searchRequest.source(searchSourceBuilder);
		//執(zhí)行檢索
		SearchResponse search = client.search(searchRequest, GuilimallElasticSearchConfig.COMMON_OPTIONS);

		//分析結(jié)果
//		searchRequest.
		System.out.println(search.toString());
//		Map map = JSON.parseObject(search.toString(), Map.class);
		//分析結(jié)果 查詢結(jié)構(gòu)
		SearchHits hits = search.getHits();
		SearchHit[] searchHits = hits.getHits();
		for (SearchHit hit: searchHits){
//			hit.getIndex();
//			hit.getId();
			String sourceAsString = hit.getSourceAsString();
			Accout accout = JSON.parseObject(sourceAsString, Accout.class);
			System.out.println(accout.toString());
		}
		//獲取檢索的分析信息
		Aggregations aggregations = search.getAggregations();
//		for (Aggregation aggregation : aggregations.asList()) {
//			System.out.println("當(dāng)前聚合名字:"+aggregation.getName());
//		}
		//分類聚合
		Terms ageAgg1 = aggregations.get("ageAgg");
		for (Terms.Bucket bucket : ageAgg1.getBuckets()) {
			String keyAsString = bucket.getKeyAsString();
			System.out.println("年齡:" + keyAsString + "人數(shù):"+bucket.getDocCount());
		}
		//平局值
		Avg balanceAvg1 = aggregations.get("balanceAvg");
		System.out.println("平均薪資"+ balanceAvg1.getValue());

	}

二、Java操作elasticSearch索引保存數(shù)據(jù)

2.1 計劃與實現(xiàn)

存儲一個新索引students,然后保存文檔

  • 借助Kibana:
> GET /students/_search

結(jié)果:
{
  "error" : {
    "root_cause" : [
      {
        "type" : "index_not_found_exception",
        "reason" : "no such index [students]",
        "resource.type" : "index_or_alias",
        "resource.id" : "students",
        "index_uuid" : "_na_",
        "index" : "students"
      }
    ],
    "type" : "index_not_found_exception",
    "reason" : "no such index [students]",
    "resource.type" : "index_or_alias",
    "resource.id" : "students",
    "index_uuid" : "_na_",
    "index" : "students"
  },
  "status" : 404
}

索引不存在

2.2單元測試

索引數(shù)據(jù)的請求是個網(wǎng)絡(luò)操作,所以會有異常處理。

//做一個學(xué)生對象
	//注解后setter getter
	@Data
	class Student{
		private String name;
		private Integer age;
		private String gender;
	}

	@Test
	public void indexData() throws IOException {
		//索引
		IndexRequest indexRequest = new IndexRequest("students");
		//數(shù)據(jù)id 不設(shè)置會自動生成
		indexRequest.id("1");

		Student student = new Student();
		student.setAge(18);
		student.setGender("男");
		student.setName("張鐵蛋");
		//對象轉(zhuǎn)換json
		String jsonString = JSON.toJSONString(student);
		//索引對象加入對象json  聲明保存形式
		indexRequest.source(jsonString, XContentType.JSON);
		//用容器中導(dǎo)入的client 調(diào)用請求  索引對象 和 配置參數(shù) 這個配置參數(shù)是整合配置時搞定的
		IndexResponse index = client.index(indexRequest, GuilimallElasticSearchConfig.COMMON_OPTIONS);
		//index為相應(yīng)數(shù)據(jù)
		System.out.println(index);
	}

2.3 執(zhí)行

2021-11-05 16:01:28.219  INFO 1548 --- [           main] c.a.g.s.GulimallSearchApplicationTests   : Started GulimallSearchApplicationTests in 18.417 seconds (JVM running for 19.985)
IndexResponse[index=students,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={"total":2,"successful":1,"failed":0}]
2021-11-05 16:01:32.019  INFO 1548 --- [       Thread-9] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

Process finished with exit code 0

2.4 查看一下Kibana操作結(jié)果

GET /students/_search

結(jié)果集:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "students",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "age" : 18,
          "gender" : "男",
          "name" : "張鐵蛋"
        }
      }
    ]
  }
}

至此,保存成功文章來源地址http://www.zghlxwxcb.cn/news/detail-691937.html

到了這里,關(guān)于Java操作elasticSearch復(fù)雜查詢以及解析數(shù)據(jù)以及索引保存數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ElasticSearch如何使用以及java代碼如何查詢并排序ES中的數(shù)據(jù)(距離排序)

    ElasticSearch如何使用以及java代碼如何查詢并排序ES中的數(shù)據(jù)(距離排序)

    import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.geo.GeoDistance; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.common.unit.

    2024年04月12日
    瀏覽(24)
  • ES es Elasticsearch 十三 Java api 實現(xiàn)搜索 分頁查詢 復(fù)雜查詢 過濾查詢 ids查詢 等

    目錄 Java api 實現(xiàn)搜索 Pom.xml 建立鏈接 搜索全部記錄 增加規(guī)則值查某些字段 搜索分頁 全代碼 Ids 搜索 搜索Match搜索 multi_match 搜索 多字段搜索 復(fù)雜查詢 bool查詢 filter? bool 復(fù)雜查詢增加過濾器查詢 復(fù)雜擦好像加排序 日志 思路 參考 api 寫法 寫Java代碼 請求條件構(gòu)建層次

    2024年02月04日
    瀏覽(25)
  • 3、HBase的java API基本操作(創(chuàng)建、刪除表以及對數(shù)據(jù)的添加、刪除、查詢以及多條件查詢)

    1、hbase-2.1.0介紹及分布式集群部署、HA集群部署、驗證、硬件配置推薦 2、hbase-2.1.0 shell基本操作詳解 3、HBase的java API基本操作(創(chuàng)建、刪除表以及對數(shù)據(jù)的添加、刪除、查詢以及多條件查詢) 4、HBase使用(namespace、數(shù)據(jù)分區(qū)、rowkey設(shè)計、原生api訪問hbase) 5、Apache Phoenix(5.0.0-5.

    2024年02月08日
    瀏覽(28)
  • 數(shù)據(jù)庫實驗一:基本表操作、基本數(shù)據(jù)查詢和復(fù)雜數(shù)據(jù)查詢

    數(shù)據(jù)庫實驗一:基本表操作、基本數(shù)據(jù)查詢和復(fù)雜數(shù)據(jù)查詢

    按下圖創(chuàng)建四個表:teacher、student、course和SC,為屬性選擇合適的域、合適的主碼和外鍵約束,并為他們插入所列出數(shù)據(jù); 中文語義 teacher (TID,TNAME,DEPT,SALARY) 教師(教工號,姓名,系,薪水) student (SID,SNAME,DEPT,AGE,GENDER) 學(xué)生(學(xué)號,姓名,系,年齡,性別) course (CID,CNAME,DE

    2024年02月01日
    瀏覽(35)
  • C/C++數(shù)據(jù)結(jié)構(gòu)之時間復(fù)雜度和空間復(fù)雜度詳細(xì)解析以及力扣刷題

    C/C++數(shù)據(jù)結(jié)構(gòu)之時間復(fù)雜度和空間復(fù)雜度詳細(xì)解析以及力扣刷題

    個人主頁:點(diǎn)我進(jìn)入主頁 專欄分類:C語言初階? ? ??C語言程序設(shè)計————KTV? ? ? ?C語言小游戲? ? ?C語言進(jìn)階 C語言刷題? ? ? ?數(shù)據(jù)結(jié)構(gòu)初階 歡迎大家點(diǎn)贊,評論,收藏。 一起努力,一起奔赴大廠。 目錄 ?1.前言 2.算法的效率 2.1時間復(fù)雜度? 2.1.1時間復(fù)雜度的定義

    2024年02月06日
    瀏覽(17)
  • Java根據(jù)id對elasticsearch查詢操作

    一、根據(jù)一個id查詢 二、根據(jù)多個ids查詢

    2024年02月12日
    瀏覽(24)
  • 【ElasticSearch】ElasticSearch Java API的使用——常用索引、文檔、查詢操作(二)

    Elaticsearch ,簡稱為es,es是一個開源的 高擴(kuò)展 的 分布式全文檢索引擎 ,它可以近乎 實時的存儲 、 檢索數(shù)據(jù); 本身擴(kuò)展性很好,可以擴(kuò)展到上百臺服務(wù)器,處理PB級別(大數(shù)據(jù)時代)的數(shù)據(jù)。es也使用java開發(fā)并使用Lucene作為其核心來實現(xiàn)所有索引和搜索的功能,但是它的 目的

    2024年01月16日
    瀏覽(124)
  • ElasticSearch學(xué)習(xí)4--復(fù)雜查詢

    ElasticSearch學(xué)習(xí)4--復(fù)雜查詢

    查詢所有:查詢出所有數(shù)據(jù),一般測試用。例如:match_all 全文檢索(full text)查詢:利用分詞器對用戶輸入內(nèi)容分詞,然后去倒排索引庫中匹配。例如: ????????match_query 根據(jù)單個字段查詢 ????????multi_match_query? 根據(jù)多個字段查詢 ????????3.精確查詢:根據(jù)精確

    2024年02月11日
    瀏覽(21)
  • ElasticSearch多條件復(fù)雜查詢實現(xiàn)

    前面實現(xiàn)方式和但條件一致 查詢代碼區(qū)別如下 注釋里面標(biāo)注了或者和and那兩行的區(qū)別 網(wǎng)站鏈接 elasticsearch(ES)在SpringBoot中的復(fù)雜查詢(多條件分頁查詢以及聚合查詢)_尺規(guī)作圖的博客-CSDN博客_springboot 整合es多條件

    2024年02月04日
    瀏覽(17)
  • Java解析JSON復(fù)雜數(shù)據(jù)的第三種思路

    Java解析JSON復(fù)雜數(shù)據(jù)的第三種思路

    本文介紹了Java解析JSON復(fù)雜數(shù)據(jù)的第三種思路,通過改變思路,按照新的流程獲取數(shù)據(jù)。文章詳細(xì)解析了接口JSON數(shù)據(jù),并提供了JSON轉(zhuǎn)XML數(shù)據(jù)

    2024年01月25日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包