- sentence
句子,使用Java的BreakIterator確定的下一個句子邊界處的突出顯示片段。您可以使用boundary_scanner_locale指定要使用的區(qū)域設(shè)置。unified highlighter高亮器默認行為。
- word
單詞,由Java的BreakIterator確定的下一個單詞邊界處高亮顯示的片段。
- boundary_scanner_locale
區(qū)域設(shè)置。該參數(shù)采用語言標記的形式,例如?!癳n - us”、“- fr”、“ja-JP”。更多信息可以在Locale語言標記文檔中找到。默認值是local . root。
- encoder
指示代碼段是否應該編碼為HTML:默認(無編碼)或HTML (HTML-轉(zhuǎn)義代碼段文本,然后插入高亮標記)。
- fields
指定要檢索高亮顯示的字段,支持通配符。例如,您可以指定comment_*來獲得以comment_開頭的所有文本和關(guān)鍵字字段的高亮顯示。
注意:當您使用通配符時,只會匹配text、keyword類型字段。
- force_source
是否強制從_source高亮顯示,默認為false。其實默認情況就是根據(jù)源字段內(nèi)容(_source)內(nèi)容高亮顯示,即使字段是單獨存儲的。
- fragmenter
指定如何在高亮顯示代碼片段中拆分文本:可選值為simple、span。僅適用于Plain highlighting。默認為span。
- simple
將文本分成大小相同的片段。
- span
將文本分割成大小相同的片段,但盡量避免在突出顯示的術(shù)語之間分割文本。這在查詢短語時很有用。
- fragment_offset
控制開始高亮顯示的margin(空白),僅適用于fast vector highlighter。
- fragment_size
高亮顯示的片段,默認100。
- highlight_query
高亮顯示匹配搜索查詢以外的查詢。如果您使用rescore查詢,這尤其有用,因為默認情況下高亮顯示并不會考慮這些查詢。通常,應該將搜索查詢包含在highlight_query中。
- matched_fields
組合多個字段上的匹配項以突出顯示單個字段。對于以不同方式分析相同字符串的多個字段,這是最直觀的。所有matched_fields必須將term_vector設(shè)置為with_positions_offset,但是只加載匹配項組合到的字段,所以建議該字段store設(shè)置為true。只適用于fast vector highlighter熒光筆。
- no_match_size
如果沒有要高亮顯示的匹配片段,則希望從字段開頭返回的文本數(shù)量。默認值為0(不返回任何內(nèi)容)。
- number_of_fragments
返回的高亮顯示片段的最大數(shù)量。如果片段的數(shù)量設(shè)置為0,則不返回片段。默認為5。
- order
該值默認為none,按照字段的順序返回高亮文檔,可以設(shè)置為score(按相關(guān)性排序)。
- phrase_limit
控制要考慮的文檔中匹配短語的數(shù)量。防止fast vector highlighter分析太多的短語和消耗太多的內(nèi)存。在使用matched_fields時,將考慮每個匹配字段的phrase_limit短語。提高限制會增加查詢時間并消耗更多內(nèi)存。只支持fast vector highlighter。默認為256。
- pre_tags
用于高亮顯示HTML標簽,與post_tags一起使用,默認用_高亮顯示文本_。
- post_tags
用于高亮顯示HTML標簽,與pre_tags一起使用,默認用_高亮顯示文本_。
- require_field_match
默認情況下,只有包含查詢匹配的字段才會高亮顯示。將require_field_match設(shè)置為false以突出顯示所有字段。默認值為true。
- tags_schema
定義高亮顯示樣式,例如_。_
- type
指定高亮顯示器,可選值:unified、plain、fvh。默認值為unified。
7.4 高亮顯示demo
public static void testSearch_highlighting() {
RestHighLevelClient client = EsClient.getClient();
try {
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(“map_highlighting_01”);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(
// QueryBuilders.matchAllQuery()
QueryBuilders.termQuery(“context”, “身份證”)
);
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field(“context”);
sourceBuilder.highlighter(highlightBuilder);
searchRequest.source(sourceBuilder);
System.out.println(client.search(searchRequest, RequestOptions.DEFAULT));
} catch (Exception e) {
// TODO: handle exception
}
}
其返回值如下:
{
“took”:2,
“timed_out”:false,
“_shards”:{
“total”:5,
“successful”:5,
“skipped”:0,
“failed”:0
},
“hits”:{
“total”:1,
“max_score”:0.2876821,
“hits”:[
{
“_index”:“map_highlighting_01”,
“_type”:“_doc”,
“_id”:“erYsbmcBeEynCj5VqVTI”,
“_score”:0.2876821,
“_source”:{
“context”:“城中西路可以受理外地二代身份證的辦理?!?/p>
},
“highlight”:{ // @1
“context”:[
“城中西路可以受理外地二代身份證的辦理?!?/p>
]
}
}
]
}
}
這里主要對highlight再做一次說明,其中每一個字段返回的內(nèi)容是對應原始數(shù)據(jù)的子集,最多fragmentSize個待關(guān)鍵字的匹配條目,通常,在頁面上顯示文本時,應該用該字段取代原始值,這樣才能有高亮顯示的效果。
8、Rescoring
重打分機制。一個查詢首先使用高效的算法查找文檔,然后對返回結(jié)果的top n 文檔運用另外的查詢算法,通常這些算法效率低效但能提供匹配精度。
resoring查詢與原始查詢分數(shù)的合計方式如下:
- total
兩個評分相加
- multiply
將原始分數(shù)乘以rescore查詢分數(shù)。用于函數(shù)查詢重定向。
- avg
取平均數(shù)
- max
取最大值
- min
取最小值。
9、Search Type
查詢類型,可選值:QUERY_THEN_FETCH、QUERY_AND_FETCH、DFS_QUERY_THEN_FETCH。默認值:query_then_fetch。
-
QUERY_THEN_FETCH:首先根據(jù)路由算法向相關(guān)分片(多個)發(fā)送請求,此時只返回documentId與一些必要信息(例如用于排序等),然后對各個分片的結(jié)果進行匯聚,排序,然后選取客戶端指定需要獲取的數(shù)據(jù)條數(shù)(top n),然后根據(jù)documentId再向各個分片請求具體的文檔信息。
-
QUERY_AND_FETCH:在5.4.x版本開始廢棄,是直接向各個分片節(jié)點請求數(shù)據(jù),每個分片返回客戶端請求數(shù)量的文檔信息,然后匯聚全部返回給客戶端,返回的數(shù)據(jù)為客戶端請求數(shù)量size * (路由后的分片數(shù)量)。
-
DFS_QUERY_THEN_FETCH:在開始向各個節(jié)點發(fā)送請求之前,會進行一次詞頻、相關(guān)性的計算,后續(xù)流程與QUERY_THEN_FETCH相同,可以看出,該查詢類型的文檔相關(guān)性會更高,但性能比QUERY_THEN_FETCH要差。
10、scroll
滾動查詢。es另外一種分頁方式。雖然搜索請求返回結(jié)果的單個“頁面”,但scroll API可以用于從單個搜索請求檢索大量結(jié)果(甚至所有結(jié)果),這與在傳統(tǒng)數(shù)據(jù)庫上使用游標的方式非常相似。scroll api不用于實時用戶請求,而是用于處理大量數(shù)據(jù),例如為了將一個索引的內(nèi)容重新索引到具有不同配置的新索引中。
10.1 如何使用scroll API
scroll API使用分為兩步:
1、第一步,首先通過scroll參數(shù),指定該滾動查詢(類似于數(shù)據(jù)庫的游標的存活時間)
POST /twitter/_search?scroll=1m
{
“size”: 100,
“query”: {
“match” : {
“title” : “elasticsearch”
}
}
}
該方法會返回一個重要的參數(shù):scrollId。
2、第二步,使用該scrollId去es服務器拉取下一批(下一頁數(shù)據(jù))
POST /_search/scroll
{
“scroll” : “1m”,
“scroll_id” : “DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==”
}
循環(huán)第三步,可以循環(huán)批量處理數(shù)據(jù)。
3、第三步,清除scrollId,類似于清除數(shù)據(jù)庫游標,快速釋放資源。
DELETE /_search/scroll
{
“scroll_id” : “DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==”
}
下面給出scoll api的java版本示例程序:
public static void testScoll() {
RestHighLevelClient client = EsClient.getClient();
String scrollId = null;
try {
System.out.println("step 1 start ");
// step 1 start
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(“map_highlighting_01”);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(
QueryBuilders.termQuery(“context”, “身份證”)
);
searchRequest.source(sourceBuilder);
searchRequest.scroll(TimeValue.timeValueMinutes(1));
SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);
scrollId = result.getScrollId();
// step 1 end
// step 2 start
if(!StringUtils.isEmpty(scrollId)) {
System.out.println("step 2 start ");
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
scrollRequest.scroll(TimeValue.timeValueMinutes(1));
while(true) { //循環(huán)遍歷
SearchResponse scollResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
if(scollResponse.getHits().getHits() == null ||
scollResponse.getHits().getHits().length < 1) {
break;
}
scrollId = scollResponse.getScrollId();
// 處理文檔
scrollRequest.scrollId(scrollId);
}
// step 2 end
}
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(!StringUtils.isEmpty(scrollId)) {
System.out.println("step 3 start ");
// step 3 start
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
try {
client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// step 3 end
}
}
}
這里重點闡述一下第一次查詢時,不僅返回scrollId,也會返回第一批數(shù)據(jù)。
10.2 Keeping the search context alive
scroll參數(shù)(傳遞給搜索請求和每個滾動請求)告訴Elasticsearch它應該保持搜索上下文活動多長時間。它的值(例如1m,參見Time unitsedit)不需要足夠長的時間來處理所有數(shù)據(jù)——它只需要足夠長的時間來處理前一批結(jié)果。每個scroll請求(帶有scroll參數(shù))設(shè)置一個新的過期時間。如果scroll請求沒有傳入scroll,那么搜索上下文將作為scroll請求的一部分被釋放。scroll其內(nèi)部實現(xiàn)類似于快照,當?shù)谝淮问盏揭粋€scroll請求時,就會為該搜索上下文所匹配的結(jié)果創(chuàng)建一個快照,隨后文檔的變化并不會反映到該API的結(jié)果。
10.3 sliced scroll
對于返回大量文檔的scroll查詢,可以將滾動分割為多個可以獨立使用的片,通過slice指定。
例如:
GET /twitter/_search?scroll=1m // @1
{
“slice”: { // @11
“id”: 0, // @12
“max”: 2 // @13
},
“query”: {
“match” : {
“title” : “elasticsearch”
}
}
}
GET /twitter/_search?scroll=1m // @2
{
“slice”: {
“id”: 1,
“max”: 2
},
“query”: {
“match” : {
“title” : “elasticsearch”
}
}
}
@1,@2兩個并列的查詢,按分片去查詢。
@11:通過slice定義分片查詢。
@12:該分片查詢的ID。
@13:本次查詢總片數(shù)。
這個機制非常適合多線程處理數(shù)據(jù)。
具體分片機制是,首先將請求轉(zhuǎn)發(fā)到各分片節(jié)點,然后在每個節(jié)點使用匹配到的文檔(hashcode(_uid)%slice片數(shù)),然后各分片節(jié)點返回數(shù)據(jù)到協(xié)調(diào)節(jié)點。也就是默認情況下,分片是根據(jù)文檔的_uid,為了提高分片過程,可以通過如下方式進行優(yōu)化,并指定分片字段。
-
分片字段類型為數(shù)值型。
-
字段的doc_values設(shè)置為true。
-
每個文檔中都索引了該字段。
-
該字段值只在創(chuàng)建時賦值,并不會更新。
-
字段的基數(shù)應該很高(相當于數(shù)據(jù)庫索引選擇度),這樣能確保每個片返回的數(shù)據(jù)相當,數(shù)據(jù)分布較均勻。
注意,默認slice片數(shù)最大為1024,可以通過索引設(shè)置項index.max_slices_per_scroll來改變默認值。
例如:
GET /twitter/_search?scroll=1m
{
“slice”: {
“field”: “date”,
“id”: 0,
“max”: 10
},
“query”: {
“match” : {
“title” : “elasticsearch”
}
}
}
11、preference
查詢選擇副本分片的傾向性(即在一個復制組中選擇副本的分片值。默認情況下,Elasticsearch以未指定的順序從可用的碎片副本中進行選擇,副本之間的路由將在集群章節(jié)更加詳細的介紹 ??梢酝ㄟ^該字段指定分片傾向與選擇哪個副本。
preference可選值:
- _primary
只在節(jié)點上執(zhí)行,在6.1.0版本后廢棄,將在7.x版本移除。
- _primary_first
優(yōu)先在主節(jié)點上執(zhí)行。在6.1.0版本后廢棄,將在7.x版本移除。
- _replica
操作只在副本分片上執(zhí)行,如果有多個副本,其順序隨機。在6.1.0版本后廢棄,將在7.x版本移除。
- _replica_first
優(yōu)先在副本分片上執(zhí)行,如果有多個副本,其順序隨機。在6.1.0版本后廢棄,將在7.x版本移除。
- _only_local
操作將只在分配給本地節(jié)點的分片上執(zhí)行。_only_local選項保證只在本地節(jié)點上使用碎片副本,這對于故障排除有時很有用。所有其他選項不能完全保證在搜索中使用任何特定的碎片副本,而且在索引更改時,這可能意味著如果在處于不同刷新狀態(tài)的不同碎片副本上執(zhí)行重復搜索,則可能產(chǎn)生不同的結(jié)果。
- _local
優(yōu)先在本地分片上執(zhí)行。
- _prefer_nodes:abc,xyz
優(yōu)先在指定節(jié)點ID的分片上執(zhí)行,示例中的節(jié)點ID為abc、xyz。
- _shards:2,3
將操作限制到指定的分片上執(zhí)行。(這里是2和3)這個首選項可以與其他首選項組合,但必須首先出現(xiàn):_shards:2,3|_local。
- _only_nodes:abc*,x*yz,…
根據(jù)節(jié)點ID進行限制。
- Custom (string) value
自定義字符串,其路由為 hashcode(該值)%賦值組內(nèi)節(jié)點數(shù)。例如在web應用中通常以sessionId為傾向值。
12、explain
是否解釋各分數(shù)是如何計算的。
GET /_search
{
“explain”: true,
“query” : {
“term” : { “user” : “kimchy” }
}
}
13、version
如果設(shè)置為true,則返回每個命中文檔的當前版本號。
GET /_search
{
“version”: true,
“query” : {
“term” : { “user” : “kimchy” }
}
}
14、Index Boost
當搜索多個索引時,允許為每個索引配置不同的boost級別。當來自一個索引的點擊率比來自另一個索引的點擊率更重要時,該屬性則非常方便。
使用示例如下:
GET /_search
{
“indices_boost” : [
{ “alias1” : 1.4 },
{ “index*” : 1.3 }
]
}
15、min_score
指定返回文檔的最小評分,如果文檔的評分低于該值,則不返回。
GET /_search
{
“min_score”: 0.5,
“query” : {
“term” : { “user” : “kimchy” }
}
}
16、Named Queries
每個過濾器和查詢都可以在其頂級定義中接受_name。搜索響應中每個匹配文檔中會增加matched_queries結(jié)構(gòu)體,記錄該文檔匹配的查詢名稱。查詢和篩選器的標記只對bool查詢有意義。
java示例如下:
public static void testNamesQuery() {
RestHighLevelClient client = EsClient.getClient();
try {
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(“esdemo”);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(
QueryBuilders.boolQuery()
.should(QueryBuilders.termQuery(“context”, “fox”).queryName(“q1”))
.should(QueryBuilders.termQuery(“context”, “brown”).queryName(“q2”))
);
searchRequest.source(sourceBuilder);
SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(result);
} catch (Throwable e) {
e.printStackTrace();
} finally {
EsClient.close(client);
}
}
返回結(jié)果如下:
{
“took”:4,
“timed_out”:false,
“_shards”:{
“total”:5,
“successful”:5,
“skipped”:0,
“failed”:0
},
“hits”:{
“total”:2,
“max_score”:0.5753642,
“hits”:[
{
“_index”:“esdemo”,
“_type”:“matchquerydemo”,
“_id”:“2”,
“_score”:0.5753642,
“_source”:{
“context”:“My quick brown as fox eats rabbits on a regular basis.”,
“title”:“Keeping pets healthy”
},
“matched_queries”:[
“q1”,
“q2”
]
},
{
“_index”:“esdemo”,
“_type”:“matchquerydemo”,
“_id”:“1”,
“_score”:0.39556286,
“_source”:{
“context”:“Brown rabbits are commonly seen brown.”,
“title”:“Quick brown rabbits”
},
“matched_queries”:[
“q2”
]
}
]
}
}
正如上面所說,每個匹配文檔中都包含matched_queries,表明該文檔匹配的是哪個查詢條件。
17、Inner hits
用于定義內(nèi)部嵌套層的返回規(guī)則,其inner hits支持如下選項:
-
from 用于內(nèi)部匹配的分頁。
-
size 用于內(nèi)部匹配的分頁,size。
-
sort 排序策略。
-
name 為內(nèi)部嵌套層定義的名稱。
該部分示例將在下節(jié)重點闡述。
18、field collapsing(字段折疊)
允許根據(jù)字段值折疊搜索結(jié)果。折疊是通過在每個折疊鍵上只選擇排序最高的文檔來完成的。有點類似于聚合分組,其效果類似于按字段進行分組,默認命中的文檔列表第一層由該字段的第一條信息,也可以通過允許根據(jù)字段值折疊搜索結(jié)果。折疊是通過在每個折疊鍵上只選擇排序最高的文檔來完成的。例如,下面的查詢?yōu)槊總€用戶檢索最佳tweet,并按喜歡的數(shù)量對它們進行排序。
下面首先通過示例進行展示field collapsing的使用。
1)首先查詢發(fā)的推特內(nèi)容中包含elasticsearch的推文:
GET /twitter/_search
{
“query”: {
“match”: {
“message”: “elasticsearch”
}
},
“collapse” : {
“field” : “user”
},
“sort”: [“l(fā)ikes”]
}
返回結(jié)果:
{
“took”:8,
“timed_out”:false,
“_shards”:{
“total”:5,
“successful”:5,
“skipped”:0,
“failed”:0
},
“hits”:{
“total”:5,
“max_score”:null,
“hits”:[
{
“_index”:“mapping_field_collapsing_twitter”,
“_type”:“_doc”,
“_id”:“OYnecmcB-IBeb8B-bF2X”,
“_score”:null,
“_source”:{
“message”:“to be a elasticsearch”,
“user”:“user2”,
“l(fā)ikes”:3
},
“sort”:[
3
]
},
{
“_index”:“mapping_field_collapsing_twitter”,
“_type”:“_doc”,
“_id”:“OonecmcB-IBeb8B-bF2q”,
“_score”:null,
“_source”:{
“message”:“to be elasticsearch”,
“user”:“user2”,
“l(fā)ikes”:3
},
“sort”:[
3
]
},
{
“_index”:“mapping_field_collapsing_twitter”,
“_type”:“_doc”,
“_id”:“OInecmcB-IBeb8B-bF2G”,
“_score”:null,
“_source”:{
“message”:“elasticsearch is very high”,
“user”:“user1”,
“l(fā)ikes”:3
},
“sort”:[
3
]
},
{
“_index”:“mapping_field_collapsing_twitter”,
“_type”:“_doc”,
“_id”:“O4njcmcB-IBeb8B-Rl2H”,
“_score”:null,
“_source”:{
“message”:“elasticsearch is high db”,
“user”:“user1”,
“l(fā)ikes”:1
},
“sort”:[
1
]
},
{
“_index”:“mapping_field_collapsing_twitter”,
“_type”:“_doc”,
“_id”:“N4necmcB-IBeb8B-bF0n”,
“_score”:null,
“_source”:{
“message”:“very likes elasticsearch”,
“user”:“user1”,
“l(fā)ikes”:1
},
“sort”:[
1
]
}
]
}
}
首先上述會列出所有用戶的推特,如果只想每個用戶只顯示一條推文,并且點贊率最高,或者每個用戶只顯示2條推文呢?
這個時候,按字段折疊就閃亮登場了。
java demo如下:
public static void search_field_collapsing() {
RestHighLevelClient client = EsClient.getClient();
try {
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(“mapping_field_collapsing_twitter”);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(
QueryBuilders.matchQuery(“message”,“elasticsearch”)
);
sourceBuilder.sort(“l(fā)ikes”, SortOrder.DESC);
CollapseBuilder collapseBuilder = new CollapseBuilder(“user”);
sourceBuilder.collapse(collapseBuilder);
searchRequest.source(sourceBuilder);
SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(result);
} catch (Throwable e) {
e.printStackTrace();
} finally {
EsClient.close(client);
}
}
其結(jié)果如下:
{
“took”:22,
“timed_out”:false,
“_shards”:{
“total”:5,
“successful”:5,
“skipped”:0,
“failed”:0
},
“hits”:{
“total”:5,
“max_score”:null,
“hits”:[
{
“_index”:“mapping_field_collapsing_twitter”,
“_type”:“_doc”,
“_id”:“OYnecmcB-IBeb8B-bF2X”,
“_score”:null,
“_source”:{
“message”:“to be a elasticsearch”,
“user”:“user2”,
“l(fā)ikes”:3
},
“fields”:{
“user”:[
“user2”
]
},
“sort”:[
3
]
},
{
“_index”:“mapping_field_collapsing_twitter”,
“_type”:“_doc”,
“_id”:“OInecmcB-IBeb8B-bF2G”,
“_score”:null,
“_source”:{
“message”:“elasticsearch is very high”,
“user”:“user1”,
“l(fā)ikes”:3
},
“fields”:{
“user”:[
“user1”
]
},
“sort”:[
3
]
}
]
}
}
上面的示例只返回了每個用戶的第一條數(shù)據(jù),如果需要每個用戶返回2條數(shù)據(jù)呢?可以通過inner_hit來設(shè)置。
public static void search_field_collapsing() {
RestHighLevelClient client = EsClient.getClient();
try {
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(“mapping_field_collapsing_twitter”);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(
QueryBuilders.matchQuery(“message”,“elasticsearch”)
);
sourceBuilder.sort(“l(fā)ikes”, SortOrder.DESC);
CollapseBuilder collapseBuilder = new CollapseBuilder(“user”);
InnerHitBuilder collapseHitBuilder = new InnerHitBuilder(“collapse_inner_hit”);
collapseHitBuilder.setSize(2);
collapseBuilder.setInnerHits(collapseHitBuilder);
sourceBuilder.collapse(collapseBuilder);
searchRequest.source(sourceBuilder);
SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(result);
} catch (Throwable e) {
e.printStackTrace();
} finally {
EsClient.close(client);
}
}
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構(gòu)動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。
既有適合小白學習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!
如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ava獲取)

獨家面經(jīng)總結(jié),超級精彩
本人面試騰訊,阿里,百度等企業(yè)總結(jié)下來的面試經(jīng)歷,都是真實的,分享給大家!
Java面試準備
準確的說這里又分為兩部分:
- Java刷題
- 算法刷題
Java刷題:此份文檔詳細記錄了千道面試題與詳解;
《一線大廠Java面試題解析+核心總結(jié)學習筆記+最新講解視頻+實戰(zhàn)項目源碼》,點擊傳送門即可獲取!
der.collapse(collapseBuilder);
searchRequest.source(sourceBuilder);
SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(result);
} catch (Throwable e) {
e.printStackTrace();
} finally {
EsClient.close(client);
}
}
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構(gòu)動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。[外鏈圖片轉(zhuǎn)存中…(img-LbS2yhuQ-1711967282022)]
[外鏈圖片轉(zhuǎn)存中…(img-4TgoB8Cj-1711967282023)]
[外鏈圖片轉(zhuǎn)存中…(img-vR4epAFB-1711967282023)]
既有適合小白學習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!
如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ava獲?。?/strong>

獨家面經(jīng)總結(jié),超級精彩
本人面試騰訊,阿里,百度等企業(yè)總結(jié)下來的面試經(jīng)歷,都是真實的,分享給大家!
[外鏈圖片轉(zhuǎn)存中…(img-pdgElrW3-1711967282024)]
[外鏈圖片轉(zhuǎn)存中…(img-IE8YKhtd-1711967282025)]
[外鏈圖片轉(zhuǎn)存中…(img-EoCP9Nm8-1711967282025)]
[外鏈圖片轉(zhuǎn)存中…(img-968jl5Fa-1711967282025)]
Java面試準備
準確的說這里又分為兩部分:
- Java刷題
- 算法刷題
Java刷題:此份文檔詳細記錄了千道面試題與詳解;
[外鏈圖片轉(zhuǎn)存中…(img-5S03FJl3-1711967282026)]
[外鏈圖片轉(zhuǎn)存中…(img-RT8Np3zr-1711967282027)]文章來源:http://www.zghlxwxcb.cn/news/detail-845664.html
《一線大廠Java面試題解析+核心總結(jié)學習筆記+最新講解視頻+實戰(zhàn)項目源碼》,點擊傳送門即可獲??!文章來源地址http://www.zghlxwxcb.cn/news/detail-845664.html
到了這里,關(guān)于Elasticsearch Search API之(Request Body Search 查詢主體)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!