Elasticsearch Search API 概述與URI Search

?本節(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:搜索類型

    1. 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)求具體的文檔信息橘茉。

    2. 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ù)量)蟋恬。

    3. 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)手猬仁。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市先誉,隨后出現(xiàn)的幾起案子湿刽,更是在濱河造成了極大的恐慌,老刑警劉巖褐耳,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诈闺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡铃芦,警方通過(guò)查閱死者的電腦和手機(jī)雅镊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刃滓,“玉大人仁烹,你說(shuō)我怎么就攤上這事∵只ⅲ” “怎么了卓缰?”我有些...
    開(kāi)封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)砰诵。 經(jīng)常有香客問(wèn)我征唬,道長(zhǎng),這世上最難降的妖魔是什么茁彭? 我笑而不...
    開(kāi)封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任总寒,我火速辦了婚禮,結(jié)果婚禮上尉间,老公的妹妹穿的比我還像新娘偿乖。我一直安慰自己,他們只是感情好哲嘲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布贪薪。 她就那樣靜靜地躺著,像睡著了一般眠副。 火紅的嫁衣襯著肌膚如雪画切。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天囱怕,我揣著相機(jī)與錄音霍弹,去河邊找鬼。 笑死娃弓,一個(gè)胖子當(dāng)著我的面吹牛典格,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播台丛,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼耍缴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了挽霉?” 一聲冷哼從身側(cè)響起防嗡,我...
    開(kāi)封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侠坎,沒(méi)想到半個(gè)月后蚁趁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡实胸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年他嫡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庐完。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涮瞻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出假褪,到底是詐尸還是另有隱情署咽,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布生音,位于F島的核電站宁否,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缀遍。R本人自食惡果不足惜慕匠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望域醇。 院中可真熱鬧台谊,春花似錦蓉媳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至盐须,卻和暖如春玩荠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贼邓。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工阶冈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塑径。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓女坑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親统舀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堂飞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容