色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ElasticSearch進階:一文全覽各種ES查詢在Java中的實現

Android編程精選 ? 來源:CSDN ? 2023-01-13 15:29 ? 次閱讀
這篇博文的主題是ES的查詢,因此我整理了盡可能齊全的ES查詢場景,形成下面的圖:560e32be-9297-11ed-bfe3-dac502259ad0.png

本文基于elasticsearch 7.13.2版本,es從7.0以后,發生了很大的更新。7.3以后,已經不推薦使用TransportClient這個client,取而代之的是Java High Level REST Client。

測試使用的數據示例

首先是,Mysql中的部分測試數據:

5618e33a-9297-11ed-bfe3-dac502259ad0.png

Mysql中的一行數據在ES中以一個文檔形式存在:

{
"_index":"person",
"_type":"_doc",
"_id":"4",
"_score":1.0,
"_source":{
"address":"峨眉山",
"modifyTime":"2021-06-291925",
"createTime":"2021-05-141107",
"sect":"峨嵋派",
"sex":"男",
"skill":"降龍十八掌",
"name":"宋青書",
"id":4,
"power":50,
"age":21
}
}

簡單梳理了一下ES JavaAPI的相關體系,感興趣的可以自己研讀一下源碼。

56289e7e-9297-11ed-bfe3-dac502259ad0.png

接下來,我們用十幾個實例,迅速上手ES的查詢操作,每個示例將提供SQL語句、ES語句和Java代碼。

1 詞條查詢

所謂詞條查詢,也就是ES不會對查詢條件進行分詞處理,只有當詞條和查詢字符串完全匹配時,才會被查詢到。

1.1 等值查詢-term

等值查詢,即篩選出一個字段等于特定值的所有記錄。

SQL:

select*frompersonwherename='張無忌';

而使用ES查詢語句卻很不一樣(注意查詢字段帶上keyword):

GET/person/_search
{
"query":{
"term":{
"name.keyword":{
"value":"張無忌",
"boost":1.0
}
}
}
}

ElasticSearch 5.0以后,string類型有重大變更,移除了string類型,string字段被拆分成兩種新的數據類型: text用于全文搜索的,而keyword用于關鍵詞搜索。

查詢結果:

{
"took":0,
"timed_out":false,
"_shards":{//分片信息
"total":1,//總計分片數
"successful":1,//查詢成功的分片數
"skipped":0,//跳過查詢的分片數
"failed":0//查詢失敗的分片數
},
"hits":{//命中結果
"total":{
"value":1,//數量
"relation":"eq"//關系:等于
},
"max_score":2.8526313,//最高分數
"hits":[
{
"_index":"person",//索引
"_type":"_doc",//類型
"_id":"1",
"_score":2.8526313,
"_source":{
"address":"光明頂",
"modifyTime":"2021-06-291656",
"createTime":"2021-05-141633",
"sect":"明教",
"sex":"男",
"skill":"九陽神功",
"name":"張無忌",
"id":1,
"power":99,
"age":18
}
}
]
}
}

Java中構造ES請求的方式:(后續例子中只保留SearchSourceBuilder的構建語句)

/**
*term精確查詢
*
*@throwsIOException
*/

@Autowired
privateRestHighLevelClientclient;

@Test
publicvoidqueryTerm()throwsIOException{
//根據索引創建查詢請求
SearchRequestsearchRequest=newSearchRequest("person");
SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.termQuery("name.keyword","張無忌"));
System.out.println("searchSourceBuilder====================="+searchSourceBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponseresponse=client.search(searchRequest,RequestOptions.DEFAULT);
System.out.println(JSONObject.toJSON(response));
}

仔細觀察查詢結果,會發現ES查詢結果中會帶有_score這一項,ES會根據結果匹配程度進行評分。打分是會耗費性能的,如果確認自己的查詢不需要評分,就設置查詢語句關閉評分:

GET/person/_search
{
"query":{
"constant_score":{
"filter":{
"term":{
"sect.keyword":{
"value":"張無忌",
"boost":1.0
}
}
},
"boost":1.0
}
}
}

Java構建查詢語句:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//這樣構造的查詢條件,將不進行score計算,從而提高查詢效率
searchSourceBuilder.query(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("sect.keyword","明教")));

1.2 多值查詢-terms

多條件查詢類似Mysql里的IN查詢,例如:

select*frompersonswheresectin('明教','武當派');

ES查詢語句:

GET/person/_search
{
"query":{
"terms":{
"sect.keyword":[
"明教",
"武當派"
],
"boost":1.0
}
}
}

Java實現:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.termsQuery("sect.keyword",Arrays.asList("明教","武當派")));
}

1.3 范圍查詢-range

范圍查詢,即查詢某字段在特定區間的記錄。

SQL:

select*frompesonswhereagebetween18and22;

ES查詢語句:

GET/person/_search
{
"query":{
"range":{
"age":{
"from":10,
"to":20,
"include_lower":true,
"include_upper":true,
"boost":1.0
}
}
}
}

Java構建查詢條件:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.rangeQuery("age").gte(10).lte(30));
}

1.4 前綴查詢-prefix

前綴查詢類似于SQL中的模糊查詢。

SQL:

select*frompersonswheresectlike'武當%';

ES查詢語句:

{
"query":{
"prefix":{
"sect.keyword":{
"value":"武當",
"boost":1.0
}
}
}
}

Java構建查詢條件:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.prefixQuery("sect.keyword","武當"));

1.5 通配符查詢-wildcard

通配符查詢,與前綴查詢類似,都屬于模糊查詢的范疇,但通配符顯然功能更強。

SQL:

select*frompersonswherenamelike'張%忌';

ES查詢語句:

{
"query":{
"wildcard":{
"sect.keyword":{
"wildcard":"張*忌",
"boost":1.0
}
}
}
}

Java構建查詢條件:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.wildcardQuery("sect.keyword","張*忌"));

2 復合查詢

前面的例子都是單個條件查詢,在實際應用中,我們很有可能會過濾多個值或字段。先看一個簡單的例子:

select*frompersonswheresex='女'andsect='明教';

這樣的多條件等值查詢,就要借用到組合過濾器了,其查詢語句是:

{
"query":{
"bool":{
"must":[
{
"term":{
"sex":{
"value":"女",
"boost":1.0
}
}
},
{
"term":{
"sect.keywords":{
"value":"明教",
"boost":1.0
}
}
}
],
"adjust_pure_negative":true,
"boost":1.0
}
}
}

Java構造查詢語句:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("sex","女"))
.must(QueryBuilders.termQuery("sect.keyword","明教"))
);

2.1 布爾查詢

布爾過濾器(bool filter)屬于復合過濾器(compound filter)的一種 ,可以接受多個其他過濾器作為參數,并將這些過濾器結合成各式各樣的布爾(邏輯)組合。

5634b3ee-9297-11ed-bfe3-dac502259ad0.png

bool 過濾器下可以有4種子條件,可以任選其中任意一個或多個。filter是比較特殊的,這里先不說。

{
"bool":{
"must":[],
"should":[],
"must_not":[],
}
}
  • must:所有的語句都必須匹配,與 ‘=’ 等價。
  • must_not:所有的語句都不能匹配,與 ‘!=’ 或 not in 等價。
  • should:至少有n個語句要匹配,n由參數控制。

精度控制:

所有 must 語句必須匹配,所有 must_not 語句都必須不匹配,但有多少 should 語句應該匹配呢?默認情況下,沒有 should 語句是必須匹配的,只有一個例外:那就是當沒有 must 語句的時候,至少有一個 should 語句必須匹配。

我們可以通過 minimum_should_match 參數控制需要匹配的 should 語句的數量,它既可以是一個絕對的數字,又可以是個百分比:

GET/person/_search
{
"query":{
"bool":{
"must":[
{
"term":{
"sex":{
"value":"女",
"boost":1.0
}
}
}
],
"should":[
{
"term":{
"address.keyword":{
"value":"峨眉山",
"boost":1.0
}
}
},
{
"term":{
"sect.keyword":{
"value":"明教",
"boost":1.0
}
}
}
],
"adjust_pure_negative":true,
"minimum_should_match":"1",
"boost":1.0
}
}
}

Java構建查詢語句:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("sex","女"))
.should(QueryBuilders.termQuery("address.word","峨眉山"))
.should(QueryBuilders.termQuery("sect.keyword","明教"))
.minimumShouldMatch(1)
);

最后,看一個復雜些的例子,將bool的各子句聯合使用:

select
*
from
persons
where
sex='女'
and
agebetween30and40
and
sect!='明教'
and
(address='峨眉山'ORskill='暗器')

用 Elasticsearch 來表示上面的 SQL 例子:

GET/person/_search
{
"query":{
"bool":{
"must":[
{
"term":{
"sex":{
"value":"女",
"boost":1.0
}
}
},
{
"range":{
"age":{
"from":30,
"to":40,
"include_lower":true,
"include_upper":true,
"boost":1.0
}
}
}
],
"must_not":[
{
"term":{
"sect.keyword":{
"value":"明教",
"boost":1.0
}
}
}
],
"should":[
{
"term":{
"address.keyword":{
"value":"峨眉山",
"boost":1.0
}
}
},
{
"term":{
"skill.keyword":{
"value":"暗器",
"boost":1.0
}
}
}
],
"adjust_pure_negative":true,
"minimum_should_match":"1",
"boost":1.0
}
}
}

用Java構建這個查詢條件:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
BoolQueryBuilderboolQueryBuilder=QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("sex","女"))
.must(QueryBuilders.rangeQuery("age").gte(30).lte(40))
.mustNot(QueryBuilders.termQuery("sect.keyword","明教"))
.should(QueryBuilders.termQuery("address.keyword","峨眉山"))
.should(QueryBuilders.rangeQuery("power.keyword").gte(50).lte(80))
.minimumShouldMatch(1);//設置should至少需要滿足幾個條件

//將BoolQueryBuilder構建到SearchSourceBuilder中
searchSourceBuilder.query(boolQueryBuilder);

2.2 Filter查詢

query和filter的區別:query查詢的時候,會先比較查詢條件,然后計算分值,最后返回文檔結果;而filter是先判斷是否滿足查詢條件,如果不滿足會緩存查詢結果(記錄該文檔不滿足結果),滿足的話,就直接緩存結果,filter不會對結果進行評分,能夠提高查詢效率。

filter的使用方式比較多樣,下面用幾個例子演示一下。

方式一,單獨使用:

{
"query":{
"bool":{
"filter":[
{
"term":{
"sex":{
"value":"男",
"boost":1.0
}
}
}
],
"adjust_pure_negative":true,
"boost":1.0
}
}
}

單獨使用時,filter與must基本一樣,不同的是filter不計算評分,效率更高。

Java構建查詢語句:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.boolQuery()
.filter(QueryBuilders.termQuery("sex","男"))
);

方式二,和must、must_not同級,相當于子查詢:

select*from(select*frompersonswheresect='明教'))awheresex='女';

ES查詢語句:

{
"query":{
"bool":{
"must":[
{
"term":{
"sect.keyword":{
"value":"明教",
"boost":1.0
}
}
}
],
"filter":[
{
"term":{
"sex":{
"value":"女",
"boost":1.0
}
}
}
],
"adjust_pure_negative":true,
"boost":1.0
}
}
}

Java:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("sect.keyword","明教"))
.filter(QueryBuilders.termQuery("sex","女"))
);

方式三,將must、must_not置于filter下,這種方式是最常用的:

{
"query":{
"bool":{
"filter":[
{
"bool":{
"must":[
{
"term":{
"sect.keyword":{
"value":"明教",
"boost":1.0
}
}
},
{
"range":{
"age":{
"from":20,
"to":35,
"include_lower":true,
"include_upper":true,
"boost":1.0
}
}
}
],
"must_not":[
{
"term":{
"sex.keyword":{
"value":"女",
"boost":1.0
}
}
}
],
"adjust_pure_negative":true,
"boost":1.0
}
}
],
"adjust_pure_negative":true,
"boost":1.0
}
}
}

Java:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構建查詢語句
searchSourceBuilder.query(QueryBuilders.boolQuery()
.filter(QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("sect.keyword","明教"))
.must(QueryBuilders.rangeQuery("age").gte(20).lte(35))
.mustNot(QueryBuilders.termQuery("sex.keyword","女")))
);

3 聚合查詢

接下來,我們將用一些案例演示ES聚合查詢。

3.1 最值、平均值、求和

案例:查詢最大年齡、最小年齡、平均年齡。

SQL:

selectmax(age)frompersons;

ES:

GET/person/_search
{
"aggregations":{
"max_age":{
"max":{
"field":"age"
}
}
}
}

Java:

@Autowired
privateRestHighLevelClientclient;

@Test
publicvoidmaxQueryTest()throwsIOException{
//聚合查詢條件
AggregationBuilderaggBuilder=AggregationBuilders.max("max_age").field("age");
SearchRequestsearchRequest=newSearchRequest("person");
SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//將聚合查詢條件構建到SearchSourceBuilder中
searchSourceBuilder.aggregation(aggBuilder);
System.out.println("searchSourceBuilder----->"+searchSourceBuilder);

searchRequest.source(searchSourceBuilder);
//執行查詢,獲取SearchResponse
SearchResponseresponse=client.search(searchRequest,RequestOptions.DEFAULT);
System.out.println(JSONObject.toJSON(response));
}

使用聚合查詢,結果中默認只會返回10條文檔數據(當然我們關心的是聚合的結果,而非文檔)。返回多少條數據可以自主控制:

GET/person/_search
{
"size":20,
"aggregations":{
"max_age":{
"max":{
"field":"age"
}
}
}
}

而Java中只需增加下面一條語句即可:

searchSourceBuilder.size(20);

與max類似,其他統計查詢也很簡單:

AggregationBuilderminBuilder=AggregationBuilders.min("min_age").field("age");
AggregationBuilderavgBuilder=AggregationBuilders.avg("min_age").field("age");
AggregationBuildersumBuilder=AggregationBuilders.sum("min_age").field("age");
AggregationBuildercountBuilder=AggregationBuilders.count("min_age").field("age");

3.2 去重查詢

案例:查詢一共有多少個門派。

SQL:

selectcount(distinctsect)frompersons;

ES:

{
"aggregations":{
"sect_count":{
"cardinality":{
"field":"sect.keyword"
}
}
}
}

Java:

@Test
publicvoidcardinalityQueryTest()throwsIOException{
//創建某個索引的request
SearchRequestsearchRequest=newSearchRequest("person");
//查詢條件
SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//聚合查詢
AggregationBuilderaggBuilder=AggregationBuilders.cardinality("sect_count").field("sect.keyword");
searchSourceBuilder.size(0);
//將聚合查詢構建到查詢條件中
searchSourceBuilder.aggregation(aggBuilder);
System.out.println("searchSourceBuilder----->"+searchSourceBuilder);

searchRequest.source(searchSourceBuilder);
//執行查詢,獲取結果
SearchResponseresponse=client.search(searchRequest,RequestOptions.DEFAULT);
System.out.println(JSONObject.toJSON(response));
}

3.3 分組聚合

3.3.1 單條件分組

案例:查詢每個門派的人數

SQL:

selectsect,count(id)frommytest.personsgroupbysect;

ES:

{
"size":0,
"aggregations":{
"sect_count":{
"terms":{
"field":"sect.keyword",
"size":10,
"min_doc_count":1,
"shard_min_doc_count":0,
"show_term_doc_count_error":false,
"order":[
{
"_count":"desc"
},
{
"_key":"asc"
}
]
}
}
}
}

Java:

SearchRequestsearchRequest=newSearchRequest("person");
SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
searchSourceBuilder.size(0);
//按sect分組
AggregationBuilderaggBuilder=AggregationBuilders.terms("sect_count").field("sect.keyword");
searchSourceBuilder.aggregation(aggBuilder);
3.3.2 多條件分組

案例:查詢每個門派各有多少個男性和女性

SQL:

selectsect,sex,count(id)frommytest.personsgroupbysect,sex;

ES:

{
"aggregations":{
"sect_count":{
"terms":{
"field":"sect.keyword",
"size":10
},
"aggregations":{
"sex_count":{
"terms":{
"field":"sex.keyword",
"size":10
}
}
}
}
}
}

3.4 過濾聚合

前面所有聚合的例子請求都省略了 query ,整個請求只不過是一個聚合。這意味著我們對全部數據進行了聚合,但現實應用中,我們常常對特定范圍的數據進行聚合,例如下例。

案例:查詢明教中的最大年齡。這涉及到聚合與條件查詢一起使用。

SQL:

selectmax(age)frommytest.personswheresect='明教';

ES:

GET/person/_search
{
"query":{
"term":{
"sect.keyword":{
"value":"明教",
"boost":1.0
}
}
},
"aggregations":{
"max_age":{
"max":{
"field":"age"
}
}
}
}

Java:

SearchRequestsearchRequest=newSearchRequest("person");
SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//聚合查詢條件
AggregationBuildermaxBuilder=AggregationBuilders.max("max_age").field("age");
//等值查詢
searchSourceBuilder.query(QueryBuilders.termQuery("sect.keyword","明教"));
searchSourceBuilder.aggregation(maxBuilder);

另外還有一些更復雜的查詢例子。

案例:查詢0-20,21-40,41-60,61以上的各有多少人。

SQL:

select
sum(casewhenage<=20then1else0end)ageGroup1,
sum(casewhenage>20andage<=40then1else0end)ageGroup2,
sum(casewhenage>40andage<=60then1else0end)ageGroup3,
sum(casewhenage>60andage<=200then1else0end)ageGroup4
from
mytest.persons;

ES:

{
"size":0,
"aggregations":{
"age_avg":{
"range":{
"field":"age",
"ranges":[
{
"from":0.0,
"to":20.0
},
{
"from":21.0,
"to":40.0
},
{
"from":41.0,
"to":60.0
},
{
"from":61.0,
"to":200.0
}
],
"keyed":false
}
}
}
}

查詢結果:

"aggregations":{
"age_avg":{
"buckets":[
{
"key":"0.0-20.0",
"from":0.0,
"to":20.0,
"doc_count":3
},
{
"key":"21.0-40.0",
"from":21.0,
"to":40.0,
"doc_count":13
},
{
"key":"41.0-60.0",
"from":41.0,
"to":60.0,
"doc_count":4
},
{
"key":"61.0-200.0",
"from":61.0,
"to":200.0,
"doc_count":1
}
]
}
}

以上是ElasticSearch查詢的全部內容,豐富詳實,堪比操作手冊,強烈建議收藏!

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2972

    瀏覽量

    104867
  • MySQL
    +關注

    關注

    1

    文章

    817

    瀏覽量

    26630

原文標題:ElasticSearch進階:一文全覽各種ES查詢在Java中的實現

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux安裝ElasticSearch

    1 版本選擇 ElasticSearch 7 及以上版本都是自帶的 jdk,假如需要配置指定的 jdk 版本的話,可以 es 的 bin 目錄下找到elasticsearch-env
    的頭像 發表于 02-15 11:09 ?762次閱讀

    Elasticsearch存在的各種漏洞問題

    elasticsearch 8 之前使用的個老系統使用了elasticsearch7.x版本,之后又反應es版本存在各種漏洞 無奈只能做版
    的頭像 發表于 09-30 10:40 ?3672次閱讀
    <b class='flag-5'>Elasticsearch</b>存在的<b class='flag-5'>各種</b>漏洞問題

    linux安裝配置ElasticSearch之源碼安裝

    ElasticSearch是基于Lucene這個非常成熟的索引方案,另加上些分布式的實現:集群,sharding,replication等。以下是對其采用源碼安裝的方法1.下載
    發表于 01-11 17:27

    ElasticSearch是最常用的組合查詢:布爾查詢

    ElasticSearch查詢 第五篇:布爾查詢
    發表于 04-22 13:02

    ElasticSearch的詞條查詢

    ElasticSearch查詢 第三篇:詞條查詢
    發表于 04-30 17:03

    ElasticSearch查詢的匹配查詢

    ElasticSearch查詢 第四篇:匹配查詢(Match)
    發表于 05-15 09:59

    如何在Python中進行Elasticsearch操作?

    ElasticSearchES)是個建立Apache Lucene之上的高度可用的分布式開源搜索引擎
    的頭像 發表于 07-20 11:12 ?7662次閱讀
    如何在Python中進行<b class='flag-5'>Elasticsearch</b>操作?

    應該怎么進階Java學習路線的應用技能

    ? ??Java學習應該怎么進階?下面就起來看看小編為大家分享的Java學習路線的四層Java進階
    發表于 11-02 16:02 ?352次閱讀

    hanlp for elasticsearch(基于hanlp的es分詞插件)

    摘要:elasticsearch是使用比較廣泛的分布式搜索引擎,es提供了個的單字分詞工具,還有個分詞插件ik使用比較廣泛,hanlp是
    發表于 11-29 15:01 ?349次閱讀

    為什么ElasticSearch復雜條件查詢比MySQL好?

    的方式因為只能通過個索引進行過濾,所以需要進行大量的 I/O 操作來讀取行數據,并消耗 CPU 進行內存過濾,導致查詢性能的下降。 而 ElasticSearch 因其特性,十分適合進行復雜條件
    的頭像 發表于 04-09 11:16 ?2943次閱讀
    為什么<b class='flag-5'>ElasticSearch</b>復雜條件<b class='flag-5'>查詢</b>比MySQL好?

    教你們怎么Django中使用ElasticSearch

    Elasticsearch是用Java開發的。 Elasticsearch的用途是什么? Elasticsearch可以使我們快速,近乎實時地存儲,搜索和分析大量數據,并在幾毫秒內給
    的頭像 發表于 06-11 16:01 ?1981次閱讀

    Elasticsearch入門簡介

    Elasticsearch(后續簡稱ES) 是個實時的分布式存儲、搜索、分析的引擎。
    的頭像 發表于 02-24 09:44 ?692次閱讀

    MySQL到ES的4種常用數據同步方案

    實際項目開發,我們經常將 MySQL 作為業務數據庫,ES 作為查詢數據庫,用來實現讀寫分離,緩解 MySQL 數據庫的
    發表于 08-09 11:36 ?651次閱讀
    MySQL到<b class='flag-5'>ES</b>的4種常用數據同步方案

    SpringBoot 連接ElasticSearch的使用方式

    在上篇 ElasticSearch 文章,我們詳細的介紹了 ElasticSearch各種 api 使用。 實際的項目開發過程,我們
    的頭像 發表于 10-09 10:35 ?1142次閱讀

    Python 更新 Elasticsearch 的幾種方法

    全文檢索、結構化搜索、分析以及這三個功能的組合 全局更新 Elasticsearch ,通過指定文檔的 _id , 使用 Elasticsearch 自帶的 index api
    的頭像 發表于 11-01 10:11 ?1277次閱讀
    Python 更新 <b class='flag-5'>Elasticsearch</b> 的幾種方法
    主站蜘蛛池模板: 亚洲免费无码中文在线| WWW色视频片内射| 国产精品久久人妻无码蜜 | 久草国产在线播放| 2022久久精品国产色蜜蜜麻豆| 欧美成ee人免费视频| 短篇合集纯肉高H深陷骚| 亚洲黄色免费在线观看| 噜噜噜狠狠夜夜躁精品| 成人无码精品一区二区在线观看| 午夜小视频免费观看| 麻豆国产精品AV色拍综合| 动漫美女被到爽了流漫画| 亚洲三级在线视频| 欧美亚洲精品真实在线| 国产嫩草在线观看| 999av视频| 亚洲AV无码乱码国产精品品麻豆 | 樱桃熟了A级毛片| 欧美性xxxx18| 国产在线午夜| FREE性丰满HD毛多多| 亚洲精品久久国产高清| 欧美 国产 日产 韩国 在线| 国产女人视频免费观看| 99福利在线| 亚洲精品乱码久久久久久直播| 欧美特级特黄a大片免费| 黄色a三级免费看| 被送到黑人性奴俱乐部| 伊人久久综合| 午夜视频在线瓜伦| 欧美在线看欧美视频免费| 九九色精品国偷自产视频| 俄罗斯14一18处交| 91久久偷偷看嫩草影院无费| 亚洲AV无码一区二区色情蜜芽| 全免费A敌肛交毛片免费懂色AV| 久久精品视在线观看2| 国产第一页在线视频| 99热成人精品国产免男男|