?本節(jié)開(kāi)始,將詳細(xì)介紹Search API的使用斧拍。
Search API概述
詳細(xì)API如下:
public final SearchResponse sear-ch(SearchRequest searchReques-t, RequestOptions options) throws IOException
-
public final void searchAsync(Sear-chRequest searchRequest, Reque-stOptions options, ActionListener li-stener)
SearchRequest類圖:
SearchRequest類圖
其關(guān)鍵屬性說(shuō)明如下:
-
private SearchType searchType = SearchType.DEFAULT:搜索類型
QUERY_THEN_FETCH
首先根據(jù)路由算法向相關(guān)分片發(fā)送請(qǐng)求日月,此時(shí)只返回documentId與一些必要信息(例如用于排序等),然 后對(duì)各個(gè)分片的結(jié)果進(jìn)行匯聚、排序郭脂。然后選取客戶端需要獲取的數(shù)據(jù)條數(shù)(top n)稽荧。最后根據(jù)doc-umentId再向各個(gè)分片請(qǐng)求具體的文檔信息橘茉。QUERY_AND_FETCH
在5.4.x版本開(kāi)始廢棄,直接向各個(gè)分片節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)姨丈,每個(gè)分片返回客戶端請(qǐng)求數(shù)量的文檔信息畅卓,然后匯聚并全部返回給客戶端,返回的數(shù)據(jù)為客戶端請(qǐng)求數(shù)量size * (路由后的分片數(shù)量)蟋恬。-
DFS_QUERY_THEN_FETCH
在開(kāi)始向各個(gè)節(jié)點(diǎn)發(fā)送請(qǐng)求之前會(huì)先進(jìn)行一次詞頻與相關(guān)性的計(jì)算翁潘,后續(xù)處理流程與QUERY_THEN_F-ETCH相同,可以看出該查詢類型的文檔相關(guān)性會(huì)更高歼争,但性能比QUE-RY_THEN_FETCH要差拜马。
private String[] indices:待查詢的索引庫(kù)。
private String routing:路由字段值沐绒。
private String preference:復(fù)制組內(nèi)傾向性俩莽。
private SearchSourceBuilder sour-ce:查詢主體(rerquest body),后續(xù)會(huì)重點(diǎn)講解乔遮。
private Boolean requestCache:是否開(kāi)啟查詢緩存扮超。
private Boolean allowPartialSearc-hResults:是否允許部分成功。
private Scroll scroll:滾動(dòng)API(用于分頁(yè))
private int batchedReduceSize = DEFAULT_BATCHED_REDUCE_SIZE:批量歸并size:默認(rèn)為512
private int maxConcurrentShardRequests = 0:建議最大值別超過(guò)256,其核心含義待研究瞒津。
private int preFilterShardSize = 128蝉衣,其核心作用待研究。
private String[] types:待查詢的類型巷蚪。
接下來(lái)再來(lái)重點(diǎn)關(guān)注一下查詢API幾個(gè)通用的參數(shù):
timeout
查詢的超時(shí)時(shí)間病毡。from
查詢開(kāi)始的偏移量,分頁(yè)參數(shù)屁柏,類似于關(guān)系數(shù)據(jù)庫(kù)的分頁(yè)的start啦膜。默認(rèn)值為0。size
批量獲取條數(shù)淌喻,用于分頁(yè)查詢僧家。search_type
查詢類型,6.4.0只支持QUERY_T-HEN_FETCH與DFS_QUERY_TH-EN_FETCH裸删。request_cache
查詢緩存八拱,如果設(shè)置為false,取決于index級(jí)別的設(shè)置涯塔,將在索引管理API時(shí)詳細(xì)講解肌稻。search_results
是否允許部分成功,例如一個(gè)查詢請(qǐng)求需要向3個(gè)分片發(fā)出請(qǐng)求匕荸,如果只有兩個(gè)分片成功返回結(jié)果而另外一個(gè)出現(xiàn)故障爹谭。如果設(shè)置為false則會(huì)返回整體失敗,如果設(shè)置為true則會(huì)成功部分結(jié)果榛搔,默認(rèn)為true诺凡。terminate after
一個(gè)查詢?yōu)槊總€(gè)分片最多收集的文檔數(shù),當(dāng)達(dá)到該數(shù)量是践惑,查詢會(huì)提前結(jié)束腹泌。batched_reduce_size
在協(xié)調(diào)節(jié)點(diǎn)上應(yīng)該立即減少一次請(qǐng)求需要訪問(wèn)的分片數(shù)量,如果一次請(qǐng)請(qǐng)求需要匯聚太多節(jié)點(diǎn)上的數(shù)據(jù)容易造成內(nèi)存消耗尔觉,該值可作為一個(gè)保護(hù)機(jī)制凉袱,控制一個(gè)請(qǐng)求同一時(shí)間并發(fā)訪問(wèn)的最大分片數(shù)量,默認(rèn)為512穷娱。
注意:search_type,request_cache和allow_partial_search_results這三個(gè)參數(shù)绑蔫,必須查詢url級(jí)別的參數(shù)(query str-ing parameters),如果使用Rest low Le-vel API時(shí)需要特別留意运沦。
URI Search
Elasticsearch支持使用URI請(qǐng)求模式來(lái)使用Search API泵额,并不支持查詢請(qǐng)求體中所有參數(shù),該模式主要用途是用于測(cè)試携添,諸如使用CURL查詢命令等嫁盲。
URI Search示例如下:
1GET twitter/_search?q=user:kimchy
URI Search支持如下參數(shù):
q
定義查詢字符串,其語(yǔ)法映射為DSL查詢語(yǔ)法之query_string。df
查詢字符串未使用字段前綴時(shí)定義的默認(rèn)字段羞秤。analyzer
針對(duì)查詢字符串使用的分詞器缸托。analyze_wildcard
是否分析通配符合前綴查詢,默認(rèn)值為false瘾蛋。batched_reduce_size
控制協(xié)調(diào)節(jié)點(diǎn)批量發(fā)送分片的最大個(gè)數(shù)俐镐,主要是控制協(xié)調(diào)節(jié)點(diǎn)內(nèi)存的消耗而提供的一種保護(hù)機(jī)制。default_oprator
默認(rèn)操作類型哺哼,可選值為and佩抹、or,默認(rèn)值為or取董。lenient
是否支持類型轉(zhuǎn)換異常棍苹,默認(rèn)為fa-sle,如果將一個(gè)字符類型傳遞給一個(gè)數(shù)字類型會(huì)拋出異常茵汰。如果設(shè)置true則忽略該異常枢里。explain
類似于執(zhí)行計(jì)劃,表示對(duì)于每一個(gè)命中蹂午,包含如果得分是如何算出來(lái)的栏豺,默認(rèn)為false。_source
用于對(duì)_source字段進(jìn)行過(guò)濾画侣,可以設(shè)置false來(lái)禁止返回_souce字段冰悠。該參數(shù)支持通配符表達(dá)式,例如ob-j.*配乱,用于字段過(guò)濾溉卓。stored_fields
用于字段過(guò)濾,已在字段過(guò)濾部分詳細(xì)介紹過(guò)搬泥。sort
排序桑寨,可以類似于關(guān)系型數(shù)據(jù)庫(kù)的排序語(yǔ)法:fieldName:asc | desc,也可以使用特殊字段_score(表示按分?jǐn)?shù)忿檩,默認(rèn)值)尉尾。track_scores
當(dāng)使用排序時(shí),跟蹤返回結(jié)果中分?jǐn)?shù)計(jì)算過(guò)程燥透。track_total_hits
默認(rèn)值為true沙咏,表示在返回結(jié)果中返回滿足該查詢條件的所有記錄數(shù)。timeout
查詢超時(shí)時(shí)間班套,默認(rèn)永不超時(shí)肢藐。terminate_after
是否開(kāi)啟提前結(jié)束查詢俊戳,主要是控制一次查詢踩官,從一個(gè)分片中返回的最大文檔數(shù)量,如果開(kāi)啟占遥,返回結(jié)果中會(huì)包含一個(gè)響應(yīng)參數(shù)terminate-d_early,指示是否提前結(jié)束痘煤。from
用于分頁(yè)凑阶,起始記錄數(shù)。size
用于分頁(yè)衷快,控制一次查詢宙橱,從每個(gè)分片查詢的記錄條數(shù)。search_type
查詢類型蘸拔,已在文章開(kāi)頭處介紹养匈。allow_partial_search_results
是否允許部分分片執(zhí)行失敗,默認(rèn)為true都伪,也可以集群配置參數(shù):se-arch.default_allow_partial_results來(lái)設(shè)置默認(rèn)值呕乎。
本節(jié)主要是對(duì)Elasticsearch Search API有一個(gè)概要的認(rèn)識(shí)與如何使用URI進(jìn)行查詢,從下一節(jié)開(kāi)始將深入到Search A-PI各個(gè)細(xì)節(jié)中去陨晶,以便大家對(duì)Search A-PI的運(yùn)用得心應(yīng)手猬仁。