国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

es的搜索結(jié)果處理

這篇具有很好參考價(jià)值的文章主要介紹了es的搜索結(jié)果處理。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.排序

elasticsearch默認(rèn)是根據(jù)相關(guān)度算分(_score)來排序,但是也支持自定義方式對搜索結(jié)果排序。可以排序字段類型有:keyword類型、數(shù)值類型、地理坐標(biāo)類型、日期類型等。

1.1.普通字段排序

keyword、數(shù)值、日期類型排序的語法基本一致。

語法

GET?/indexName/_search
{
??"query":?{
????"match_all":?{}
??},
??"sort":?[
????{
??????"FIELD":?"desc"??//?排序字段、排序方式ASC、DESC
????}
??]
}

排序條件是一個(gè)數(shù)組,也就是可以寫多個(gè)排序條件。按照聲明的順序,當(dāng)?shù)谝粋€(gè)條件相等時(shí),再按照第二個(gè)條件排序,以此類推

1.2.地理坐標(biāo)排序

地理坐標(biāo)排序略有不同。

語法說明

GET?/indexName/_search
{
??"query":?{
????"match_all":?{}
??},
??"sort":?[
????{
??????"_geo_distance"?:?{
??????????"FIELD"?:?"緯度,經(jīng)度", // 文檔中g(shù)eo_point類型的字段名、目標(biāo)坐標(biāo)點(diǎn)
??????????"order"?:?"asc", // 排序方式
??????????"unit"?:?"km" // 排序的距離單位
??????}
????}
??]
}

這個(gè)查詢的含義是:

  • 指定一個(gè)坐標(biāo),作為目標(biāo)點(diǎn)

  • 計(jì)算每一個(gè)文檔中,指定字段(必須是geo_point類型)的坐標(biāo) 到目標(biāo)點(diǎn)的距離是多少

  • 根據(jù)距離排序

2.分頁

elasticsearch 默認(rèn)情況下只返回top10的數(shù)據(jù)。而如果要查詢更多數(shù)據(jù)就需要修改分頁參數(shù)了。elasticsearch中通過修改from、size參數(shù)來控制要返回的分頁結(jié)果:

  • from:從第幾個(gè)文檔開始

  • size:總共查詢幾個(gè)文檔

類似于mysql中的limit ?, ?

2.1.基本的分頁

分頁的基本語法如下:

GET?/hotel/_search
{
??"query":?{
????"match_all":?{}
??},
??"from":?0,?//?分頁開始的位置,默認(rèn)為0
??"size":?10,?//?期望獲取的文檔總數(shù)
??"sort":?[
????{"price":?"asc"}
??]
}

2.2.深度分頁問題

現(xiàn)在,我要查詢990~1000的數(shù)據(jù),查詢邏輯要這么寫:

GET?/hotel/_search
{
??"query":?{
????"match_all":?{}
??},
??"from":?990,?//?分頁開始的位置,默認(rèn)為0
??"size":?10,?//?期望獲取的文檔總數(shù)
??"sort":?[
????{"price":?"asc"}
??]
}

這里是查詢990開始的數(shù)據(jù),也就是 第990~第1000條 數(shù)據(jù)。

不過,elasticsearch內(nèi)部分頁時(shí),必須先查詢 0~1000條,然后截取其中的990 ~ 1000的這10條:

es的搜索結(jié)果處理,es學(xué)習(xí),elasticsearch,數(shù)據(jù)庫

查詢TOP1000,如果es是單點(diǎn)模式,這并無太大影響。

但是elasticsearch將來一定是集群,例如我集群有5個(gè)節(jié)點(diǎn),我要查詢TOP1000的數(shù)據(jù),并不是每個(gè)節(jié)點(diǎn)查詢200條就可以了。

因?yàn)楣?jié)點(diǎn)A的TOP200,在另一個(gè)節(jié)點(diǎn)可能排到10000名以外了。

因此要想獲取整個(gè)集群的TOP1000,必須先查詢出每個(gè)節(jié)點(diǎn)的TOP1000,匯總結(jié)果后,重新排名,重新截取TOP1000。

es的搜索結(jié)果處理,es學(xué)習(xí),elasticsearch,數(shù)據(jù)庫

那如果我要查詢9900~10000的數(shù)據(jù)呢?是不是要先查詢TOP10000呢?那每個(gè)節(jié)點(diǎn)都要查詢10000條?匯總到內(nèi)存中?

當(dāng)查詢分頁深度較大時(shí),匯總數(shù)據(jù)過多,對內(nèi)存和CPU會產(chǎn)生非常大的壓力,因此elasticsearch會禁止from+ size 超過10000的請求。

針對深度分頁,ES提供了兩種解決方案,官方文檔:

  • search after:分頁時(shí)需要排序,原理是從上一次的排序值開始,查詢下一頁數(shù)據(jù)。官方推薦使用的方式。

  • scroll:原理將排序后的文檔id形成快照,保存在內(nèi)存。官方已經(jīng)不推薦使用。

2.3.小結(jié)

分頁查詢的常見實(shí)現(xiàn)方案以及優(yōu)缺點(diǎn):

  • from + size

    • 優(yōu)點(diǎn):支持隨機(jī)翻頁

    • 缺點(diǎn):深度分頁問題,默認(rèn)查詢上限(from + size)是10000

    • 場景:百度、京東、谷歌、淘寶這樣的隨機(jī)翻頁搜索

  • after search

    • 優(yōu)點(diǎn):沒有查詢上限(單次查詢的size不超過10000)

    • 缺點(diǎn):只能向后逐頁查詢,不支持隨機(jī)翻頁

    • 場景:沒有隨機(jī)翻頁需求的搜索,例如手機(jī)向下滾動(dòng)翻頁

  • scroll

    • 優(yōu)點(diǎn):沒有查詢上限(單次查詢的size不超過10000)

    • 缺點(diǎn):會有額外內(nèi)存消耗,并且搜索結(jié)果是非實(shí)時(shí)的

    • 場景:海量數(shù)據(jù)的獲取和遷移。從ES7.1開始不推薦,建議用 after search方案。

3.高亮

3.1.高亮原理

什么是高亮顯示呢?

我們在百度,京東搜索時(shí),關(guān)鍵字會變成紅色,比較醒目,這叫高亮顯示:

高亮顯示的實(shí)現(xiàn)分為兩步:

  • 1)給文檔中的所有關(guān)鍵字都添加一個(gè)標(biāo)簽,例如<em>標(biāo)簽

  • 2)頁面給<em>標(biāo)簽編寫CSS樣式

3.2.實(shí)現(xiàn)高亮

高亮的語法

GET?/hotel/_search
{
??"query":?{
????"match":?{
??????"FIELD":?"TEXT" // 查詢條件,高亮一定要使用全文檢索查詢
????}
??},
??"highlight":?{
????"fields":?{?//?指定要高亮的字段
??????"FIELD":?{
????????"pre_tags":?"<em>",??//?用來標(biāo)記高亮字段的前置標(biāo)簽
????????"post_tags":?"</em>"?//?用來標(biāo)記高亮字段的后置標(biāo)簽
??????}
????}
??}
}

注意:

  • 高亮是對關(guān)鍵字高亮,因此搜索條件必須帶有關(guān)鍵字,而不能是范圍這樣的查詢。

  • 默認(rèn)情況下,高亮的字段,必須與搜索指定的字段一致,否則無法高亮

  • 如果要對非搜索字段高亮,則需要添加一個(gè)屬性:required_field_match=false

4.總結(jié)

查詢的DSL是一個(gè)大的JSON對象,包含下列屬性:

  • query:查詢條件

  • from和size:分頁條件

  • sort:排序條件

  • highlight:高亮條件文章來源地址http://www.zghlxwxcb.cn/news/detail-789519.html

到了這里,關(guān)于es的搜索結(jié)果處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Elasticsearch 核心技術(shù)(九):搜索結(jié)果處理(分頁、排序、指定返回字段、去重、高亮顯示)

    Elasticsearch 核心技術(shù)(九):搜索結(jié)果處理(分頁、排序、指定返回字段、去重、高亮顯示)

    ?? 博客主頁:水滴技術(shù) ?? 支持水滴: 點(diǎn)贊 ?? + 收藏 ? + 留言 ?? ?? 訂閱專欄:大數(shù)據(jù)核心技術(shù)從入門到精通

    2023年04月13日
    瀏覽(23)
  • 【ElasticSearch】使用 Java 客戶端 RestClient 實(shí)現(xiàn)對文檔的查詢操作,以及對搜索結(jié)果的排序、分頁、高亮處理

    【ElasticSearch】使用 Java 客戶端 RestClient 實(shí)現(xiàn)對文檔的查詢操作,以及對搜索結(jié)果的排序、分頁、高亮處理

    在 Elasticsearch 中,通過 RestAPI 進(jìn)行 DSL 查詢語句的構(gòu)建通常是通過 HighLevelRestClient 中的 resource() 方法來實(shí)現(xiàn)的。該方法包含了查詢、排序、分頁、高亮等所有功能,為構(gòu)建復(fù)雜的查詢提供了便捷的接口。 RestAPI 中構(gòu)建查詢條件的核心部分是由一個(gè)名為 QueryBuilders 的工具類提供

    2024年01月16日
    瀏覽(41)
  • Elasticsearch(八)搜索---搜索輔助功能(上)--指定搜索返回字段,結(jié)果計(jì)數(shù)和分頁

    Elasticsearch(八)搜索---搜索輔助功能(上)--指定搜索返回字段,結(jié)果計(jì)數(shù)和分頁

    前面我們已經(jīng)將ES的基礎(chǔ)操作(索引,映射,文檔)學(xué)習(xí)過了,從這一章開始,我們便開始學(xué)習(xí)ES的最大的功能—搜索 ES為用戶提供了豐富的搜索功能:既有基本的搜索功能,又有搜索建議功能;既有常用的普通類型的匹配功能,又有基于地理位置的搜索功能;既提供了分頁搜

    2024年02月05日
    瀏覽(20)
  • elasticsearch使用template搜索多個(gè)索引并且高亮返回結(jié)果

    由于搜索多個(gè)索引沒辦法以定義好的Entity來接收quey的結(jié)果,所以keyword搜索時(shí)不能按照以前的方式來直接分頁搜索 所以這里選擇重寫搜索方法來自定義map返回結(jié)果,實(shí)現(xiàn)手動(dòng)分頁和替換高亮搜索的結(jié)果

    2024年02月11日
    瀏覽(22)
  • 帝國cms將沒有搜索到結(jié)果的關(guān)鍵字存入到數(shù)據(jù)庫的方法

    在帝國cms網(wǎng)站前臺搜索一個(gè),如果在網(wǎng)站中查詢到了,這個(gè)會被記錄入搜索表中,但是如果在網(wǎng)站中沒有搜索到,就不會記錄入搜索表中,那怎么把沒有搜索結(jié)果的才能記錄到數(shù)據(jù)庫中,方法如下: 打開/e/search/index.php 在$searchid=0上方加入以

    2024年02月03日
    瀏覽(19)
  • Python獲取Yandex搜索引擎搜索結(jié)果詳解

    Python獲取Yandex搜索引擎搜索結(jié)果詳解

    ?? 個(gè)人網(wǎng)站:ipengtao.com 在網(wǎng)絡(luò)搜索領(lǐng)域,Yandex是一個(gè)備受歡迎的搜索引擎,特別在俄羅斯和周邊地區(qū)使用廣泛。本文將詳細(xì)介紹如何使用Python獲取Yandex搜索引擎的搜索結(jié)果,以便在項(xiàng)目中進(jìn)行搜索結(jié)果分析和數(shù)據(jù)挖掘。 使用 requests 庫向Yandex搜索引擎發(fā)送HTTP請求。 確保已經(jīng)

    2024年01月23日
    瀏覽(19)
  • 搜索引擎的個(gè)性化搜索:為何搜索結(jié)果因人而異

    搜索引擎的個(gè)性化搜索:為何搜索結(jié)果因人而異

    ?? 個(gè)人網(wǎng)站:【海擁】【游戲大全】【神級源碼資源網(wǎng)】 ?? 前端學(xué)習(xí)課程:??【28個(gè)案例趣學(xué)前端】【400個(gè)JS面試題】 ?? 尋找學(xué)習(xí)交流、摸魚劃水的小伙伴,請點(diǎn)擊【摸魚學(xué)習(xí)交流群】 搜索引擎已成為我們獲取信息的重要工具,而當(dāng)我們輸入相同的進(jìn)行搜索時(shí),為

    2024年02月11日
    瀏覽(21)
  • 織夢dedecms在搜索結(jié)果頁按欄目分類顯示搜索數(shù)據(jù)

    搜索結(jié)果示范 1、搜索框代碼里使用name=\\\"q\\\"作為搜索框?qū)傩裕??2、打開 /include/taglib/arclist.lib.php 找到,大概在188行 $innertext = trim($innertext); 在它下面加入 preg_match(\\\"/~([A-Za-z0-9_]+)~/s\\\", $keyword, $conditions); if(isset($_REQUEST[\\\'q\\\']) $keyword = \\\'~q~\\\') { preg_match(\\\"/~([A-Za-z0-9_]+)~/s\\\", $keyword, $cond

    2024年02月03日
    瀏覽(23)
  • 詳解dedecms搜索頁面單獨(dú)調(diào)用搜索結(jié)果條數(shù)的實(shí)現(xiàn)方法

    DEDE的搜索結(jié)果數(shù)量都集成在了列表分頁標(biāo)簽里,并沒有使用單獨(dú)的函數(shù)來提供這個(gè)結(jié)果數(shù)量,因此對有單獨(dú)調(diào)用搜索結(jié)果數(shù)量的用戶來說,就有使用問題,這里提供二次開發(fā)的方法。 非常簡單只要修改幾個(gè)地方就行了: 第一步,打開/include/arc.searchview.class.php文件,查找代碼

    2024年02月02日
    瀏覽(23)
  • 帝國CMS搜索結(jié)果顯示數(shù)量的實(shí)現(xiàn)方法

    最近在做帝國CMS的搜索功能,記錄一下方便大家以后使用,本文主要講解一下修改帝國CMS搜索結(jié)果每頁顯示的數(shù)量的兩種方法。 1、方法一:在后臺搜索模板中直接設(shè)置數(shù)量 在后臺——系統(tǒng)——系統(tǒng)參數(shù)設(shè)置——搜索設(shè)置——頁面設(shè)置,如下圖: 2、方法二:直接更改搜索系

    2024年02月03日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包