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

elasticsearch 深度分頁(yè)查詢(xún) Search_after(圖文教程)

這篇具有很好參考價(jià)值的文章主要介紹了elasticsearch 深度分頁(yè)查詢(xún) Search_after(圖文教程)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言
這是我在這個(gè)網(wǎng)站整理的筆記,有錯(cuò)誤的地方請(qǐng)指出,關(guān)注我,接下來(lái)還會(huì)持續(xù)更新。
作者:神的孩子都在歌唱

一. 簡(jiǎn)介

search_after 是 Elasticsearch 提供的一種分頁(yè)查詢(xún)方式,它可以用來(lái)在已經(jīng)排序的結(jié)果集中進(jìn)行分頁(yè)查詢(xún)。

search_after查詢(xún)步驟如下(下面有具體的例子幫助理解):

elasticsearch search_after,elasticsearch,elasticsearch,jenkins,大數(shù)據(jù)

最后一條排序結(jié)果相當(dāng)于它的游標(biāo)

優(yōu)點(diǎn):

  1. 性能優(yōu)勢(shì): 相對(duì)于傳統(tǒng)的 fromsize 參數(shù)來(lái)說(shuō),search_after 在處理大量數(shù)據(jù)時(shí)性能更好,因?yàn)樗恍枰^(guò)之前的結(jié)果集,不嚴(yán)格受制于 max_result_window,可以無(wú)限制往后翻頁(yè)。 fromsize只能翻頁(yè)10000條.
  2. 適用于實(shí)時(shí)數(shù)據(jù): 在實(shí)時(shí)數(shù)據(jù)更新頻繁的場(chǎng)景下,search_after 可以確保查詢(xún)結(jié)果的準(zhǔn)確性,因?yàn)樗粫?huì)受到新數(shù)據(jù)插入的影響。
  3. 避免深度分頁(yè)問(wèn)題: 使用 search_after 可以避免深度分頁(yè)問(wèn)題,即當(dāng)頁(yè)數(shù)很大時(shí),傳統(tǒng)的分頁(yè)方式性能會(huì)下降。

缺點(diǎn):

  1. 需要結(jié)果排序: 使用 search_after 前需要對(duì)結(jié)果集進(jìn)行排序,如果排序字段較多或者數(shù)據(jù)量較大,可能會(huì)影響性能。
  2. 只適用于唯一排序字段: search_after 只支持基于唯一排序字段的分頁(yè)查詢(xún),如果有多個(gè)排序字段,需要確保排序字段的唯一性。
  3. 不支持隨機(jī)訪問(wèn): 由于 search_after 是基于上一頁(yè)的最后一個(gè)文檔進(jìn)行分頁(yè),所以不支持隨機(jī)訪問(wèn),只能逐頁(yè)查詢(xún)。

使用場(chǎng)景:

  1. 大數(shù)據(jù)量分頁(yè)查詢(xún): 當(dāng)需要處理大量數(shù)據(jù)并進(jìn)行分頁(yè)查詢(xún)時(shí),search_after 可以提供更好的性能。
  2. 實(shí)時(shí)數(shù)據(jù)展示: 在實(shí)時(shí)數(shù)據(jù)展示的場(chǎng)景下,可以使用 search_after 來(lái)確保查詢(xún)結(jié)果的準(zhǔn)確性。
  3. 避免深度分頁(yè)問(wèn)題: 當(dāng)需要避免深度分頁(yè)問(wèn)題時(shí),可以考慮使用 search_after 來(lái)提高查詢(xún)效率。

官方文檔說(shuō)明不再建議使用scroll滾動(dòng)分頁(yè)和from size分頁(yè),建議使用search_after

We no longer recommend using the scroll API for deep pagination. If you need to preserve the index state while paging through more than 10,000 hits, use the search_after parameter with a point in time (PIT).

我們不再建議使用滾動(dòng) API 進(jìn)行深度分頁(yè)。如果需要在分頁(yè)超過(guò) 10,000 個(gè)命中時(shí)保留索引狀態(tài),請(qǐng)使用帶有時(shí)間點(diǎn) (PIT) 的 search_after 參數(shù)。

By default, you cannot use from and size to page through more than 10,000 hits. This limit is a safeguard set by the index.max_result_window index setting. If you need to page through more than 10,000 hits, use the search_after parameter instead.

默認(rèn)情況下,您不能使用fromsize翻閱超過(guò) 10,000 個(gè)點(diǎn)擊。該限制是由索引設(shè)置設(shè)置的保障措施 index.max_result_window。如果您需要翻閱超過(guò) 10,000 個(gè)點(diǎn)擊,請(qǐng)使用search_after 參數(shù)代替。

二. 不帶PIT的search_after查詢(xún)

建議帶PIT,我舉的這個(gè)列子是幫助理解PIT的作用

2.1 構(gòu)造數(shù)據(jù)

PUT /test/_bulk?refresh
{"index":{}}
{"name": "小狗", "leg": 4, "iswing": false}
{"index":{}}
{"name": "小雞", "leg": 2, "iswing": true}
{"index":{}}
{"name": "小貓", "leg": 4, "iswing": false}

2.2 search_after分頁(yè)查詢(xún)

注意:當(dāng)我們使用search_after時(shí),from值必須設(shè)置為0或者-1。

首先我們通過(guò)排序查詢(xún)10條數(shù)據(jù)

GET /test/_search
{
  "size": 10, 
  "sort": [
    {
      "name.keyword": {
        "order": "desc" // 對(duì)返回的值進(jìn)行排序
      }
    }
  ]
}

elasticsearch search_after,elasticsearch,elasticsearch,jenkins,大數(shù)據(jù)

要獲取下一頁(yè)結(jié)果,需要使用最后一條文檔的排序值(也就是sort列表里面的值) 作為 search_after 參數(shù)重新運(yùn)行上一個(gè)搜索。

GET test/_search
{
  "size": 10, 
  "search_after": ["小雞"],
  "sort": [
    {
      "name.keyword": {
        "order": "desc"
      }
    }
  ]
}

這樣子他就會(huì)從排序好的name為小貓開(kāi)始查詢(xún)

elasticsearch search_after,elasticsearch,elasticsearch,jenkins,大數(shù)據(jù)

2.2 問(wèn)題

  1. 每次檢索新的結(jié)果頁(yè)時(shí)更新數(shù)組,重復(fù)此過(guò)程。如果這些請(qǐng)求之間發(fā)生刷新,結(jié)果的順序可能會(huì)發(fā)生變化,從而導(dǎo)致頁(yè)面之間的結(jié)果不一致。為了防止這種情況,您可以創(chuàng)建一個(gè)時(shí)間點(diǎn) (PIT) 來(lái)在搜索中保留當(dāng)前索引狀態(tài)。

  2. 排序的值不唯一,翻頁(yè)的時(shí)候文檔對(duì)應(yīng)不上。為了防止這種情況,PIT 搜索請(qǐng)求都會(huì)添加一個(gè)名為 _shard_doc 的隱式排序字段,該字段也可以顯式提供,這個(gè)字段在es中叫做 tiebreaker 。此字段包含每個(gè)文檔的唯一值。如果您不包含tiebreaker字段,則分頁(yè)結(jié)果可能會(huì)丟失或重復(fù)命中。

比如我在插入一只小鳥(niǎo)

PUT /test/_bulk?refresh
{"index":{}}
{"name": "小鳥(niǎo)", "leg": 2, "iswing": true}

在執(zhí)行查詢(xún)語(yǔ)句

GET test/_search
{
  "size": 10, 
  "search_after": ["小雞"],
  "sort": [
    {
      "name.keyword": {
        "order": "desc"
      }
    }
  ]
}

可以看到查詢(xún)的結(jié)果發(fā)生了變化,并且第11條應(yīng)該還是小雞而不是小鳥(niǎo)

elasticsearch search_after,elasticsearch,elasticsearch,jenkins,大數(shù)據(jù)

為了解決這種情況,es在7.x引入了PIT的概念,它相當(dāng)于是 存儲(chǔ)索引數(shù)據(jù)狀態(tài)的輕量級(jí)視圖。

三. 帶PIT的search_after查詢(xún)

一些關(guān)于PIT的知識(shí):

PIT的快照時(shí)間點(diǎn): 創(chuàng)建 PIT 時(shí)記錄的是索引狀態(tài)的快照,而不是實(shí)時(shí)數(shù)據(jù)。即使 PIT 不過(guò)期,它也只反映創(chuàng)建 PIT 時(shí)的索引狀態(tài),而不包括之后新增的數(shù)據(jù)。

數(shù)據(jù)更新延遲: 即使使用 PIT 進(jìn)行查詢(xún),由于數(shù)據(jù)寫(xiě)入和索引過(guò)程中可能存在一定的延遲,新數(shù)據(jù)可能不會(huì)立即反映在查詢(xún)結(jié)果中。這種延遲可能導(dǎo)致查詢(xún)結(jié)果不是實(shí)時(shí)的。

實(shí)時(shí)性需求: 如果需要實(shí)時(shí)性較高的查詢(xún)結(jié)果,可能需要結(jié)合其他機(jī)制或策略來(lái)確保數(shù)據(jù)的實(shí)時(shí)性,如定時(shí)刷新 PIT、定時(shí)重新創(chuàng)建 PIT 等。

PIT對(duì)于翻頁(yè)的作用:PIT確保了在后續(xù)翻頁(yè)的過(guò)程中,可能會(huì)有新數(shù)據(jù)寫(xiě)入等操作,但這些操作不會(huì)對(duì)原有結(jié)果集構(gòu)成影響,保障數(shù)據(jù)的一致性。

關(guān)于 pit的官方文檔

3.1 構(gòu)建第一次查詢(xún)條件

POST /test/_pit?keep_alive=1m

keep_alive必須要加上,它表示這個(gè)pit能存在多久,這里設(shè)置的是1分鐘

elasticsearch search_after,elasticsearch,elasticsearch,jenkins,大數(shù)據(jù)

構(gòu)建第一次查詢(xún)條件

GET /_search
{
  "size": 10,
  "pit": {
    "id": "z9_qAwELdGVzdC0wMDAwMDQWVGxjUUVIUzhRQktTTkJRU3VQQXlodwAWWGlMYTRUQ2VUaE9PVlJHNzRTdHBVdwAAAAAAAAauuRZ3bEkwVkx1MlR6YVlsMUZ4MHpUV05nAAEWVGxjUUVIUzhRQktTTkJRU3VQQXlodwAA",
    "keep_alive":"1m"
  },
   "sort": [
    {
      "name.keyword": {
        "order": "desc"
      }
    }
  ]
}

輸出值如下

elasticsearch search_after,elasticsearch,elasticsearch,jenkins,大數(shù)據(jù)

我上面展示的是最后一條文檔,可以看到排序sort中莫名多了個(gè)28 ,這在es官方文檔中叫做tiebreaker ,官方文檔中解釋如下

如果您使用 PIT,tiebreaker 是 隱含的排序值,是基于_shard_doc 的升序排序方式。 _shard_doc 值是 PIT 中的分片索引和 Lucene 的內(nèi)部文檔 ID 的組合,它對(duì)于每個(gè)文檔都是唯一的 。您還可以在搜索請(qǐng)求中手動(dòng)添加 tiebreaker 以自定義順序:

網(wǎng)上解釋:tiebreaker (決勝字段),tiebreaker 等價(jià)于_shard_doc。tiebreaker 本質(zhì)是每個(gè)文檔的唯一值,確保分頁(yè)不會(huì)丟失或者分頁(yè)結(jié)果數(shù)據(jù)出現(xiàn)重復(fù)(相同頁(yè)重復(fù)或跨頁(yè)重復(fù))。

可以在sort里面加上_shard_doc 進(jìn)行自定義排序

"sort": [
{
  "name.keyword": {
    "order": "desc"
  },
  "_shard_doc": "asc"
}

3.2 進(jìn)行下一頁(yè)查詢(xún)

我們?cè)谀盟黶ort里面的值放入到search_after中進(jìn)行下一頁(yè)查詢(xún)

在每個(gè)搜索請(qǐng)求中添加 keep_alive 參數(shù)來(lái)延長(zhǎng) PIT 的保留期,相當(dāng)于是重置了一下時(shí)間

GET /_search
{
  "size": 10,
  "pit": {
    "id": "z9_qAwELdGVzdC0wMDAwMDQWVGxjUUVIUzhRQktTTkJRU3VQQXlodwAWWGlMYTRUQ2VUaE9PVlJHNzRTdHBVdwAAAAAAAAauuRZ3bEkwVkx1MlR6YVlsMUZ4MHpUV05nAAEWVGxjUUVIUzhRQktTTkJRU3VQQXlodwAA",
    "keep_alive":"1m"
  },
   "sort": [
    {
      "name.keyword": {
        "order": "desc"
      }
    }
  ],
  "search_after": [
      "小雞",
      28
  ],
  "track_total_hits": false     // 禁用總點(diǎn)擊率跟蹤以加快分頁(yè)速度     
}

通過(guò)以下輸出可以看到。我們已經(jīng)成功進(jìn)入到下一頁(yè)了

elasticsearch search_after,elasticsearch,elasticsearch,jenkins,大數(shù)據(jù)

這樣子就能夠成功進(jìn)行分頁(yè)查詢(xún)了

3.3 刪除PIT

完成后,您應(yīng)該刪除您的 PIT。

DELETE /_pit
{
    "id" : "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA=="
}

四.參考文章

https://blog.csdn.net/qq_26857259/article/details/134372438

https://blog.csdn.net/yangbindxj/article/details/123979413 有上一頁(yè)方案

作者:神的孩子都在歌唱
本人博客:https://blog.csdn.net/weixin_46654114
轉(zhuǎn)載說(shuō)明:務(wù)必注明來(lái)源,附帶本人博客連接。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-847595.html

到了這里,關(guān)于elasticsearch 深度分頁(yè)查詢(xún) Search_after(圖文教程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Elasticsearch From/Size、Scroll、Search After對(duì)比

    Elasticsearch From/Size、Scroll、Search After對(duì)比

    Elasticsearch From/Size、Scroll、Search After對(duì)比 可以使用from和size參數(shù)對(duì)結(jié)果進(jìn)行分頁(yè)。from參數(shù)定義要獲取的第一個(gè)結(jié)果的偏移量。 size 參數(shù)允許您配置要返回的最大匹配數(shù)。 簡(jiǎn)單來(lái)說(shuō),需要查詢(xún)from + size 的條數(shù)時(shí),coordinate node就向該index的其余的shards 發(fā)送同樣的請(qǐng)求,等匯總到(

    2023年04月08日
    瀏覽(36)
  • ElasticSearch - DSL查詢(xún)文檔語(yǔ)法,以及深度分頁(yè)問(wèn)題、解決方案

    ElasticSearch - DSL查詢(xún)文檔語(yǔ)法,以及深度分頁(yè)問(wèn)題、解決方案

    目錄 一、DSL 查詢(xún)文檔語(yǔ)法 前言 1.1、DSL Query 基本語(yǔ)法 1.2、全文檢索查詢(xún) 1.2.1、match 查詢(xún) 1.2.2、multi_match 1.3、精確查詢(xún) 1.3.1、term 查詢(xún) 1.3.2、range 查詢(xún) 1.4、地理查詢(xún) 1.4.1、geo_bounding_box 1.4.2、geo_distance 1.5、復(fù)合查詢(xún) 1.5.1、相關(guān)性算分 1.5.2、function_score 1.5.3、boolean query 1.6、搜索

    2024年02月07日
    瀏覽(25)
  • es--Elastic Search深度分頁(yè)問(wèn)題分析及四種解決方案

    ? Elasticsearch的深度分頁(yè)是指當(dāng)你需要查詢(xún)的結(jié)果數(shù)量非常多時(shí),需要分頁(yè)查詢(xún)的第n頁(yè)時(shí),每次查詢(xún)都需要掃描前n-1頁(yè)的數(shù)據(jù)來(lái)獲取結(jié)果。這樣會(huì)導(dǎo)致性能問(wèn)題,因?yàn)樗枰荛L(zhǎng)的時(shí)間來(lái)完成查詢(xún)。 Scroll API: Scroll API可以讓你在每個(gè)查詢(xún)階段中存儲(chǔ)狀態(tài)。這樣,你就不需要從

    2024年02月08日
    瀏覽(18)
  • Elasticsearch Search API之(Request Body Search 查詢(xún)主體)

    Elasticsearch Search API之(Request Body Search 查詢(xún)主體)

    sentence 句子,使用Java的BreakIterator確定的下一個(gè)句子邊界處的突出顯示片段。您可以使用boundary_scanner_locale指定要使用的區(qū)域設(shè)置。unified highlighter高亮器默認(rèn)行為。 word 單詞,由Java的BreakIterator確定的下一個(gè)單詞邊界處高亮顯示的片段。 boundary_scanner_locale 區(qū)域設(shè)置。該參數(shù)采

    2024年04月09日
    瀏覽(44)
  • Elasticsearch Search API之(Request Body Search 查詢(xún)主體)(1)

    Elasticsearch Search API之(Request Body Search 查詢(xún)主體)(1)

    “failed”:0 }, “hits”:{ “total”:1, “max_score”:0.2876821, “hits”:[ { “_index”:“map_highlighting_01”, “_type”:“_doc”, “_id”:“erYsbmcBeEynCj5VqVTI”, “_score”:0.2876821, “_source”:{ “context”:“城中西路可以受理外地二代身份證的辦理。” }, “highlight”:{ // @1 “context”:[ “城中西

    2024年04月13日
    瀏覽(28)
  • Elasticsearch Search Scroll API(滾動(dòng)查詢(xún))

    Elasticsearch Search Scroll API(滾動(dòng)查詢(xún))

    參考:Elasticsearch Search Scroll API(滾動(dòng)查詢(xún)) - 簡(jiǎn)書(shū) Elasticsearch 中,傳統(tǒng)的分頁(yè)查詢(xún)使用 from+size 的模式, from 就是頁(yè)碼,從 0 開(kāi)始。默認(rèn)情況下,當(dāng) (from+1)*size 大于 10000 時(shí),也就是已查詢(xún)的總數(shù)據(jù)量大于 10000 時(shí),會(huì)出現(xiàn)異常。 如下,用循環(huán)模擬一個(gè)連續(xù)分頁(yè)查詢(xún): 最終當(dāng)

    2023年04月20日
    瀏覽(18)
  • Elasticsearch ES 簡(jiǎn)單查詢(xún) Query String Search 入門(mén)

    嘗試了text類(lèi)型排序需要特別處理下. \\\"reason\\\" : \\\"Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index.

    2024年02月16日
    瀏覽(27)
  • ElasticSearch分頁(yè)查詢(xún)

    ElasticSearch分頁(yè)查詢(xún)

    一、ES支持的三種分頁(yè)查詢(xún)方式 From + Size 查詢(xún) Scroll 遍歷查詢(xún) Search After 查詢(xún) 二、分布式系統(tǒng)中的深度分頁(yè)問(wèn)題 為什么分布式存儲(chǔ)系統(tǒng)中對(duì)深度分頁(yè)支持都不怎么友好呢? 首先我們看一下分布式存儲(chǔ)系統(tǒng)中分頁(yè)查詢(xún)的過(guò)程。 假設(shè)在一個(gè)有 4 個(gè)主分片的索引中搜索,每頁(yè)返回

    2024年02月08日
    瀏覽(23)
  • Java Elasticsearch分頁(yè)查詢(xún)

    核心代碼 分頁(yè)查詢(xún)示例

    2024年02月13日
    瀏覽(17)
  • elasticSearch 分頁(yè)查詢(xún)出現(xiàn)重復(fù)數(shù)據(jù)

    ????????match查詢(xún)默認(rèn)按照評(píng)分排序,出現(xiàn)數(shù)據(jù)評(píng)分一致,客戶(hù)端調(diào)用分頁(yè)的時(shí)候,會(huì)出現(xiàn)數(shù)據(jù)重復(fù)錯(cuò)亂很?chē)?yán)重。from size 做分頁(yè),每次都是重新加載,所以評(píng)分一致的數(shù)據(jù),順序有可能會(huì)變化。在分頁(yè)的臨界點(diǎn),容易導(dǎo)致數(shù)據(jù)重復(fù)。 ?解決方法: 1. 使用不重復(fù)字段進(jìn)行排

    2024年04月16日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包