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

Elasticsearch“滾動查詢“(Scrolling)的機(jī)制的與Java使用ES Client 調(diào)用滾動查詢

這篇具有很好參考價值的文章主要介紹了Elasticsearch“滾動查詢“(Scrolling)的機(jī)制的與Java使用ES Client 調(diào)用滾動查詢。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

ES在進(jìn)行普通的查詢時,默認(rèn)只會查詢出來10條數(shù)據(jù)。我們通過設(shè)置es中的size可以將最終的查詢結(jié)果從10增加到10000。如果需要查詢數(shù)據(jù)量大于es的翻頁限制或者需要將es的數(shù)據(jù)進(jìn)行導(dǎo)出又當(dāng)如何?
Elasticsearch提供了一種稱為"滾動查詢"(Scrolling)的機(jī)制,用于處理大型數(shù)據(jù)集的分頁查詢。滾動查詢允許在持續(xù)的時間段內(nèi)保持一個活動的搜索上下文,然后使用滾動ID進(jìn)行迭代檢索結(jié)果。滾動查詢和關(guān)系型數(shù)據(jù)庫中的游標(biāo)有點類似,因此也叫游標(biāo)查詢

1. 滾動查詢的一般步驟

1.1 發(fā)起初始搜索請求,返回命中結(jié)果和滾動ID

scroll=5m表示每個滾動查詢的有效時間為5分鐘

POST /your_index/_search?scroll=5m
{
  "size": 100,       // 每次返回的結(jié)果數(shù)量
  "query": { ... }   // 查詢條件
}

命中結(jié)果:

{
  "_scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==",
  "hits": {
    "total": {
      "value": 10000,
      "relation": "eq"
    },
    "hits": [ ... ]  // 檢索到的文檔
  }
}

示例:
Elasticsearch“滾動查詢“(Scrolling)的機(jī)制的與Java使用ES Client 調(diào)用滾動查詢

1.2 使用滾動ID檢索下一頁結(jié)果

POST /_search/scroll
{
  "scroll": "5m",
  "scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}

示例:

POST /_search/scroll
 {
   "scroll": "5m",
   "scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFDJPRXc0WWdCY1BLWlo1MTk4MmR3AAAAAAAAAXYWcWgwSW5CQUtScEd2T2QtRGtYaWliQQ=="
 }

Elasticsearch“滾動查詢“(Scrolling)的機(jī)制的與Java使用ES Client 調(diào)用滾動查詢

1.4 重復(fù)執(zhí)行直到?jīng)]有檢索結(jié)果返回

Elasticsearch將返回下一頁結(jié)果和一個新的滾動ID??梢愿鶕?jù)需要重復(fù)這個步驟,直到?jīng)]有更多結(jié)果為止

1.5 清除滾動上下文釋放資源

滾動查詢結(jié)束后,您可以通過發(fā)送一個清除滾動上下文的請求來釋放資源:

DELETE /_search/scroll
{
  "scroll_id": [
    "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
  ]
}

以上為滾動查詢進(jìn)行分頁檢索的基本過程。在每個滾動請求中,都需要提供先前滾動請求返回的滾動ID。這樣Elasticsearch才能夠維護(hù)搜索上下文并返回正確的結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-511674.html

2.Java Elasticsearch客戶端執(zhí)行滾動查詢

public static void main(String[] args) {

    long start = System.currentTimeMillis();

    //構(gòu)建es HttpHost對象
    HttpHost httpHost1 = new HttpHost("192.168.1.1", 9200, "http");

    // 滾動時間窗口
    long scrollTime = 1L;
    // 每次返回的文檔數(shù)量
    int batchSize = 20000;
    //索引名
    String indexName = "你的索引名稱";

    try (RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(httpHost1))) {

        //構(gòu)建查詢請求
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.boolQuery());
        searchSourceBuilder.size(batchSize);
        //設(shè)置查詢返回字段
        String[] includes = {};
        searchSourceBuilder.fetchSource(includes, null);

        // 滾動查詢請求
        SearchRequest searchRequest = new SearchRequest(indexName);
        searchRequest.source(searchSourceBuilder);
        //設(shè)置請求滾動時間窗口時間
        searchRequest.scroll(TimeValue.timeValueMinutes(scrollTime));

        //執(zhí)行首次檢索
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

        //首次檢索返回scrollId,用于下一次的滾動查詢
        String scrollId = searchResponse.getScrollId();
        //獲取首次檢索命中結(jié)果
        SearchHit[] searchHits = searchResponse.getHits().getHits();

        //計數(shù)
        int count = 0;
        // 處理第一批結(jié)果
        for (SearchHit hit : searchHits) {
            // 處理單個文檔
            JSONObject dataJson = (JSONObject) JSON.parse(hit.getSourceAsString());
            System.out.println("====對首次請求的進(jìn)行處理,當(dāng)前計數(shù):" + count++);
        }

        // 處理滾動結(jié)果
        while (searchHits != null && searchHits.length > 0) {
            SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
            scrollRequest.scroll(TimeValue.timeValueMinutes(scrollTime));

            searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
            scrollId = searchResponse.getScrollId();
            searchHits = searchResponse.getHits().getHits();

            for (SearchHit hit : searchHits) {
                JSONObject dataJson = (JSONObject) JSON.parse(hit.getSourceAsString());
                System.out.println("====滾動查詢,當(dāng)前計數(shù):" + count++);
            }
        }

        // 清理滾動上下文
        ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
        clearScrollRequest.addScrollId(scrollId);

        ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
        boolean succeeded = clearScrollResponse.isSucceeded();

        long end = System.currentTimeMillis();
        System.out.println("共執(zhí)行時間:" + (end - start) / 1000 + " s");

    } catch (Exception e) {
        System.out.println("===error==" + e.getMessage());
        e.printStackTrace();
    }
}

3. SpringDataElasticsearch滾動查詢

import org.elasticsearch.action.search .*;
import org.elasticsearch.client .*;
import org.elasticsearch.common.unit .*;
import org.elasticsearch.index.query .*;
import org.elasticsearch.search .*;
import org.elasticsearch.search.builder .*;
import org.springframework.beans.factory.annotation .*;
import org.springframework.data.elasticsearch.core .*;
import org.springframework.data.elasticsearch.core.query .*;

public class ScrollSearchExample {

    @Autowired
    private ElasticsearchOperations elasticsearchOperations;

    public void performScrollSearch() {
        String scrollTime = "1m";  // 滾動時間窗口
        int batchSize = 100;  // 每次返回的文檔數(shù)量

        QueryBuilder queryBuilder = QueryBuilders.matchQuery("field", "value");
        NativeSearchQueryBuilder searchQuery = new NativeSearchQueryBuilder();
        searchQuery.withQuery(queryBuilder).withPageable(PageRequest.of(0, batchSize)).build();


        SearchResponse searchResponse = elasticsearchOperations.startScroll(
                scrollTime,
                searchQuery,
                YourEntityClass.class,
                IndexCoordinates.of("your_index")
        );

        String scrollId = searchResponse.getScrollId();
        SearchHits<YourEntityClass> searchHits = searchResponse.getSearchHits();

        // 處理第一批結(jié)果
        for (SearchHit<YourEntityClass> hit : searchHits) {
            YourEntityClass entity = hit.getContent();
            // 處理單個文檔
        }

        // 處理滾動結(jié)果
        while (searchHits != null && searchHits.hasSearchHits()) {
            searchResponse = elasticsearchOperations.continueScroll(scrollId, scrollTime, YourEntityClass.class);
            scrollId = searchResponse.getScrollId();
            searchHits = searchResponse.getSearchHits();

            for (SearchHit<YourEntityClass> hit : searchHits) {
                YourEntityClass entity = hit.getContent();
                // 處理單個文檔
            }
        }

        // 清理滾動上下文
        elasticsearchOperations.clearScroll(scrollId);
    }
}

到了這里,關(guān)于Elasticsearch“滾動查詢“(Scrolling)的機(jī)制的與Java使用ES Client 調(diào)用滾動查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • ElasticSearch6.x版本的Scroll滾動查詢講解及Kibana和SpringBoot實操演示

    ElasticSearch6.x版本的Scroll滾動查詢講解及Kibana和SpringBoot實操演示

    ElasticSearch中在進(jìn)行普通的查詢時, 默認(rèn)只會查詢出來10條數(shù)據(jù) 。我們通過設(shè)置ElasticSearch中的 size 可以將最終的查詢結(jié)果從 10 增加到 10000 。但這時候如果我們需要查詢的數(shù)據(jù)大于10000條怎么辦呢?這時候有兩種方法: 深度分頁 和 滾動查詢 。在這里我們優(yōu)選選擇 滾動查詢

    2024年01月17日
    瀏覽(22)
  • Java中Elasticsearch使用類似MySQL的OR和AND查詢

    本文用實例來介紹如何使用Spring Data?Elasticsearch的ElasticsearchRestTemplate來操作ES,在Java中Elasticsearch使用類似MySQL的OR和AND進(jìn)行多條件查詢。 官網(wǎng) Elasticsearch Operations 一種復(fù)合查詢,把其余類型的查詢包裹進(jìn)來,支持以下三種邏輯關(guān)系。 ES查詢實例如下: 在Java中代碼示例: 該m

    2024年02月02日
    瀏覽(20)
  • ElasticSearch如何使用以及java代碼如何查詢并排序ES中的數(shù)據(jù)(距離排序)

    ElasticSearch如何使用以及java代碼如何查詢并排序ES中的數(shù)據(jù)(距離排序)

    import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.geo.GeoDistance; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.common.unit.

    2024年04月12日
    瀏覽(24)
  • es滾動查詢分析和使用步驟

    es滾動查詢分析和使用步驟

    ES在進(jìn)行普通的查詢時,默認(rèn)只會查詢出來10條數(shù)據(jù)。我們通過設(shè)置es中的size可以將最終的查詢結(jié)果從10增加到10000。如果需要查詢數(shù)據(jù)量大于es的翻頁限制或者需要將es的數(shù)據(jù)進(jìn)行導(dǎo)出又當(dāng)如何? Elasticsearch提供了一種稱為\\\"滾動查詢\\\"(Scrolling)的機(jī)制,用于處理大型數(shù)據(jù)集的分

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

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

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

    2024年01月16日
    瀏覽(41)
  • elasticsearch使用腳本 滾動關(guān)閉索引,更新index setting

    elasticsearch使用腳本 滾動關(guān)閉索引,更新index setting

    ? ? ?在舊的索引中更新mapping時,新增了分詞器(分詞器已經(jīng)在模板中添加),但是在更新mapping時報錯: 查看elasticsearch官網(wǎng),發(fā)現(xiàn)不允許在已經(jīng)存在的索引中動態(tài)更新分詞器,只能先將索引close,更新分詞器,然后再打開 Update index settings API | Elasticsearch Guide [8.3] | Elastic 2.1 由

    2024年02月08日
    瀏覽(20)
  • Python環(huán)境下基于門控雙注意力機(jī)制的滾動軸承剩余使用壽命RUL預(yù)測(Tensorflow模塊)

    Python環(huán)境下基于門控雙注意力機(jī)制的滾動軸承剩余使用壽命RUL預(yù)測(Tensorflow模塊)

    機(jī)械設(shè)備的壽命是其從開始工作持續(xù)運行直至故障出現(xiàn)的整個時間段,以滾動軸承為例,其壽命為開始轉(zhuǎn)動直到滾動體或是內(nèi)外圈等元件出現(xiàn)首次出現(xiàn)故障前。目前主流的滾動軸承RUL預(yù)測分類方法包含兩種:一是基于物理模型的RUL預(yù)測方法,二是基于數(shù)據(jù)驅(qū)動的RUL預(yù)測方法。

    2024年02月22日
    瀏覽(20)
  • Java Elasticsearch分頁查詢

    核心代碼 分頁查詢示例

    2024年02月13日
    瀏覽(17)
  • ElasticSearch java API - 聚合查詢

    ElasticSearch java API - 聚合查詢

    }, “l(fā)ow”: { “type”: “l(fā)ong” }, “date”: { “format”: “strict_date_optional_time||epoch_millis”, “type”: “date” }, “close”: { “type”: “l(fā)ong” } }, “_all”: { “enabled”: false } } } 索引中的全部數(shù)據(jù): name age salary team position james 33 3000 cav sf irving 25 2000 cav pg curry 29 1000 war pg thompson 26

    2024年04月10日
    瀏覽(23)
  • Java Elasticsearch多條件分組聚合查詢

    需求 ????????在項目開發(fā)中,需要從elasticsearch中查詢?nèi)罩緮?shù)據(jù),先統(tǒng)計每一天的日志調(diào)用量,然后在每一天的分組聚合基礎(chǔ)上,再分組聚合統(tǒng)計成功和失敗的日志調(diào)用量。 代碼

    2024年02月08日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包