在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

ElasticSearch進階:一文全覽各種ES查詢在Java中的實現(xiàn)

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

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

測試使用的數(shù)據(jù)示例

首先是,Mysql中的部分測試數(shù)據(jù):

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

Mysql中的一行數(shù)據(jù)在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的相關(guān)體系,感興趣的可以自己研讀一下源碼。

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

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

1 詞條查詢

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

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字段被拆分成兩種新的數(shù)據(jù)類型: text用于全文搜索的,而keyword用于關(guān)鍵詞搜索。

查詢結(jié)果:

{
"took":0,
"timed_out":false,
"_shards":{//分片信息
"total":1,//總計分片數(shù)
"successful":1,//查詢成功的分片數(shù)
"skipped":0,//跳過查詢的分片數(shù)
"failed":0//查詢失敗的分片數(shù)
},
"hits":{//命中結(jié)果
"total":{
"value":1,//數(shù)量
"relation":"eq"//關(guān)系:等于
},
"max_score":2.8526313,//最高分?jǐn)?shù)
"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中構(gòu)造ES請求的方式:(后續(xù)例子中只保留SearchSourceBuilder的構(gòu)建語句)

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

@Autowired
privateRestHighLevelClientclient;

@Test
publicvoidqueryTerm()throwsIOException{
//根據(jù)索引創(chuàng)建查詢請求
SearchRequestsearchRequest=newSearchRequest("person");
SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構(gòu)建查詢語句
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));
}

仔細觀察查詢結(jié)果,會發(fā)現(xiàn)ES查詢結(jié)果中會帶有_score這一項,ES會根據(jù)結(jié)果匹配程度進行評分。打分是會耗費性能的,如果確認自己的查詢不需要評分,就設(shè)置查詢語句關(guān)閉評分:

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

Java構(gòu)建查詢語句:

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

1.2 多值查詢-terms

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

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

ES查詢語句:

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

Java實現(xiàn):

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

1.3 范圍查詢-range

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

SQL:

select*frompesonswhereagebetween18and22;

ES查詢語句:

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

Java構(gòu)建查詢條件:

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

1.4 前綴查詢-prefix

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

SQL:

select*frompersonswheresectlike'武當(dāng)%';

ES查詢語句:

{
"query":{
"prefix":{
"sect.keyword":{
"value":"武當(dāng)",
"boost":1.0
}
}
}
}

Java構(gòu)建查詢條件:

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

1.5 通配符查詢-wildcard

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

SQL:

select*frompersonswherenamelike'張%忌';

ES查詢語句:

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

Java構(gòu)建查詢條件:

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

2 復(fù)合查詢

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

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構(gòu)造查詢語句:

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

2.1 布爾查詢

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

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

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

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

精度控制:

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

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

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構(gòu)建查詢語句:

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

最后,看一個復(fù)雜些的例子,將bool的各子句聯(lián)合使用:

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構(gòu)建這個查詢條件:

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//構(gòu)建查詢語句
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);//設(shè)置should至少需要滿足幾個條件

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

2.2 Filter查詢

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

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

方式一,單獨使用:

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

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

Java構(gòu)建查詢語句:

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

方式二,和must、must_not同級,相當(dāng)于子查詢:

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();
//構(gòu)建查詢語句
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();
//構(gòu)建查詢語句
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();
//將聚合查詢條件構(gòu)建到SearchSourceBuilder中
searchSourceBuilder.aggregation(aggBuilder);
System.out.println("searchSourceBuilder----->"+searchSourceBuilder);

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

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

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

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

searchSourceBuilder.size(20);

與max類似,其他統(tǒng)計查詢也很簡單:

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{
//創(chuàng)建某個索引的request
SearchRequestsearchRequest=newSearchRequest("person");
//查詢條件
SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();
//聚合查詢
AggregationBuilderaggBuilder=AggregationBuilders.cardinality("sect_count").field("sect.keyword");
searchSourceBuilder.size(0);
//將聚合查詢構(gòu)建到查詢條件中
searchSourceBuilder.aggregation(aggBuilder);
System.out.println("searchSourceBuilder----->"+searchSourceBuilder);

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

3.3 分組聚合

3.3.1 單條件分組

案例:查詢每個門派的人數(shù)

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 ,整個請求只不過是一個聚合。這意味著我們對全部數(shù)據(jù)進行了聚合,但現(xiàn)實應(yīng)用中,我們常常對特定范圍的數(shù)據(jù)進行聚合,例如下例。

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

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

另外還有一些更復(fù)雜的查詢例子。

案例:查詢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
}
}
}
}

查詢結(jié)果:

"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查詢的全部內(nèi)容,豐富詳實,堪比操作手冊,強烈建議收藏!

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2974

    瀏覽量

    105045
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    829

    瀏覽量

    26713

原文標(biāo)題:ElasticSearch進階:一文全覽各種ES查詢在Java中的實現(xiàn)

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

收藏 人收藏

    評論

    相關(guān)推薦

    Linux安裝ElasticSearch

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

    Elasticsearch存在的各種漏洞問題

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

    linux安裝配置ElasticSearch之源碼安裝

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

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

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

    ElasticSearch的詞條查詢

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

    ElasticSearch查詢的匹配查詢

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

    如何在Python中進行Elasticsearch操作?

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

    應(yīng)該怎么進階Java學(xué)習(xí)路線的應(yīng)用技能

    ? ??Java學(xué)習(xí)應(yīng)該怎么進階?下面就起來看看小編為大家分享的Java學(xué)習(xí)路線的四層Java進階
    發(fā)表于 11-02 16:02 ?357次閱讀

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

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

    為什么ElasticSearch復(fù)雜條件查詢比MySQL好?

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

    教你們怎么Django中使用ElasticSearch

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

    Elasticsearch入門簡介

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

    MySQL到ES的4種常用數(shù)據(jù)同步方案

    實際項目開發(fā),我們經(jīng)常將 MySQL 作為業(yè)務(wù)數(shù)據(jù)庫,ES 作為查詢數(shù)據(jù)庫,用來實現(xiàn)讀寫分離,緩解 MySQL 數(shù)據(jù)庫的
    發(fā)表于 08-09 11:36 ?679次閱讀
    MySQL到<b class='flag-5'>ES</b>的4種常用數(shù)據(jù)同步方案

    SpringBoot 連接ElasticSearch的使用方式

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

    Python 更新 Elasticsearch 的幾種方法

    全文檢索、結(jié)構(gòu)化搜索、分析以及這三個功能的組合 全局更新 Elasticsearch ,通過指定文檔的 _id , 使用 Elasticsearch 自帶的 index api
    的頭像 發(fā)表于 11-01 10:11 ?1316次閱讀
    Python 更新 <b class='flag-5'>Elasticsearch</b> 的幾種方法
    主站蜘蛛池模板: 黑色丝袜美女被视频网站 | 国产成人精品男人的天堂538 | 伊人手机在线观看 | 天天色综合2 | 波多野吉衣一区二区三区在线观看 | 色视频在线观看网站 | 夜夜天天 | 丁香婷婷开心激情深爱五月 | 国产一区二区三区夜色 | 123综合网在线 | 午夜日 | 九九免费久久这里有精品23 | 亚洲国产成人精品女人久久久 | avtt香蕉 | 中国男女全黄大片一级 | 日本黄色免费一级片 | 国产精品久久久福利 | 男人j进入女人免费视频 | 二区中文字幕 | 国产亚洲婷婷香蕉久久精品 | 美女露出尿口让男人桶爽网站 | 一级片免费视频 | 精品国产亚洲人成在线 | 91网站网站网站在线 | 被公侵犯肉体中文字幕一区二区 | 三级三级三级网站网址 | 亚洲人成影院在线高清 | 天堂网www中文在线资源 | 国产一区二区三区波多野吉衣 | seba51久久精品| 成人免费播放视频777777 | 韩国三级hd中文字幕好大 | 国产yw855.c免费视频 | 国产乱淫a∨片免费视频 | 黄色录像视频网站 | 好紧好爽太大了h快穿 | 欧美一级黄色片 | 丁香花小说 | 天天澡天天摸天天添视频 | 婷婷国产成人久久精品激情 | 在线观看黄日本高清视频 |