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

ElasticSearch7.3學習(二十二)----Text字段排序、Scroll分批查詢場景解析

這篇具有很好參考價值的文章主要介紹了ElasticSearch7.3學習(二十二)----Text字段排序、Scroll分批查詢場景解析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、Text字段排序

場景:數(shù)據(jù)庫中按照某個字段排序,sql只需寫order by 字段名即可,如果es對一個text field進行排序,es中無法排序。因為文檔入倒排索引表時,分詞存入,es無法知道此字段的真實值。這樣的結(jié)果往往不準確,因為分詞后是多個單詞,再排序就不是我們想要的結(jié)果了。

通常有兩種解決辦法:

  1. 將一個text field建立兩次索引,一個分詞,用來進行搜索;一個不分詞,用來進行排序。
  2. mapping時設置fielddata:true,按照第一個分詞進行字典序排序。這種方式也不是很準確,因為只是按照第一個分詞進行排序,后續(xù)的分詞不會參與排序。fielddata:true的排序是對text內(nèi)部分詞結(jié)果進行排序之后再進行外部排序的,效率低不推薦使用;

樣例如下:

首先建立索引

PUT /website
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      },
      "content": {
        "type": "text",
        "fielddata": true
      },
      "post_date": {
        "type": "date"
      },
      "author_id": {
        "type": "long"
      }
    }
  }
}

插入數(shù)據(jù)

PUT /website/_doc/1
{
  "title": "first article",
  "content": "this is my second article",
  "post_date": "2019-01-01",
  "author_id": 110
}

PUT /website/_doc/2
{
    "title": "second article",
    "content": "this is my second article",
     "post_date": "2019-01-01",
    "author_id": 110
}

PUT /website/_doc/3
{
     "title": "third article",
     "content": "this is my third article",
     "post_date": "2019-01-02",
     "author_id": 110
}

搜索,按照整個title的值進行排序

GET /website/_search
{
  "query": {
 ?  "match_all": {}
  },
  "sort": [
 ?  {
 ? ?  "title.keyword": {
 ? ? ?  "order": "desc"
 ? ?  }
 ?  }
  ]
}

結(jié)果如下:

ElasticSearch7.3學習(二十二)----Text字段排序、Scroll分批查詢場景解析

可以看出是以title的內(nèi)容進行排序

然后再看下"fielddata": true這種情況,對content進行排序

GET /website/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "content": {
        "order": "desc"
      }
    }
  ]
}

結(jié)果如下:

ElasticSearch7.3學習(二十二)----Text字段排序、Scroll分批查詢場景解析

結(jié)果是以分詞后的第一個單詞進行排序,排序結(jié)果不準確,所以不推薦使用。

2、Scroll分批查詢

場景:下載某一個索引中1億條數(shù)據(jù),到文件或是數(shù)據(jù)庫。

不能一下全查出來,這樣會造成系統(tǒng)內(nèi)存溢出。所以使用scoll滾動搜索技術,一批一批查詢。scoll搜索會在第一次搜索的時候,保存一個當時的視圖快照,之后只會基于該舊的視圖快照提供數(shù)據(jù)搜索,如果這個期間數(shù)據(jù)變更,是不會讓用戶看到的。每次發(fā)送scroll請求,我們還需要指定一個scoll參數(shù),指定一個時間窗口,每次搜索請求只要在這個時間窗口內(nèi)能完成就可以了。

假如有三億條數(shù)據(jù),這里實際只有3條

添加測試數(shù)據(jù)

PUT /book/_doc/1
{
  "name": "Bootstrap開發(fā)",
  "description": "Bootstrap是由Twitter推出的一個前臺頁面開發(fā)css框架,是一個非常流行的開發(fā)框架,此框架集成了多種頁面效果。此開發(fā)框架包含了大量的CSS、JS程序代碼,可以幫助開發(fā)者(尤其是不擅長css頁面開發(fā)的程序人員)輕松的實現(xiàn)一個css,不受瀏覽器限制的精美界面css效果。",
  "studymodel": "201002",
  "price": 38.6,
  "timestamp": "2019-08-25 19:11:35",
  "pic": "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
  "tags": [
 ?  "bootstrap",
 ?  "dev"
  ]
}
?
PUT /book/_doc/2
{
  "name": "java編程思想",
  "description": "java語言是世界第一編程語言,在軟件開發(fā)領域使用人數(shù)最多。",
  "studymodel": "201001",
  "price": 68.6,
  "timestamp": "2019-08-25 19:11:35",
  "pic": "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
  "tags": [
 ?  "java",
 ?  "dev"
  ]
}
?
PUT /book/_doc/3
{
  "name": "spring開發(fā)基礎",
  "description": "spring 在java領域非常流行,java程序員都在用。",
  "studymodel": "201001",
  "price": 88.6,
  "timestamp": "2019-08-24 19:11:35",
  "pic": "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
  "tags": [
 ?  "spring",
 ?  "java"
  ]
}

搜索

GET /book/_search?scroll=1m
{
  "query": {
    "match_all": {}
  },
  "size": 1
}

首先獲取第一批次的數(shù)據(jù),這里只返回一條。

{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAByQWQWx5bzRmTW9TeUNpNmVvN0E2dF9YQQ==",
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "book",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "Bootstrap開發(fā)",
          "description" : "Bootstrap是一個非常流行的開發(fā)框架。此開發(fā)框架可以幫助不擅長css頁面開發(fā)的程序人員輕松的實現(xiàn)一個css,不受瀏覽器限制的精美界面css效果。",
          "studymodel" : "201002",
          "price" : 38.6,
          "timestamp" : "2019-08-25 19:11:35",
          "pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
          "tags" : [
            "bootstrap",
            "dev"
          ]
        }
      }
    ]
  }
}

可以看到獲取到了第一條的數(shù)據(jù),獲得的結(jié)果里面包含有一個scoll_id,下一次再發(fā)送scoll請求的時候,必須帶上這個scoll_id,接下來獲取第二條數(shù)據(jù)

GET /_search/scroll
{
    "scroll": "1m", 
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAByQWQWx5bzRmTW9TeUNpNmVvN0E2dF9YQQ=="
}

獲取成功第二條數(shù)據(jù)

{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAByQWQWx5bzRmTW9TeUNpNmVvN0E2dF9YQQ==",
  "took" : 1,
  "timed_out" : false,
  "terminated_early" : true,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "book",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "java編程思想",
          "description" : "java語言是世界第一編程語言,在軟件開發(fā)領域使用人數(shù)最多。",
          "studymodel" : "201001",
          "price" : 68.6,
          "timestamp" : "2019-08-25 19:11:35",
          "pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
          "tags" : [
            "java",
            "dev"
          ]
        }
      }
    ]
  }
}

每一次都帶上上一次的_scroll_id。,接下來獲取第三條數(shù)據(jù)。

GET /_search/scroll
{
    "scroll": "1m", 
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAByQWQWx5bzRmTW9TeUNpNmVvN0E2dF9YQQ=="
}

成功獲取第三條數(shù)據(jù):文章來源地址http://www.zghlxwxcb.cn/news/detail-478115.html

{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAByQWQWx5bzRmTW9TeUNpNmVvN0E2dF9YQQ==",
  "took" : 1,
  "timed_out" : false,
  "terminated_early" : true,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "book",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "spring開發(fā)基礎",
          "description" : "spring 在java領域非常流行,java程序員都在用。",
          "studymodel" : "201001",
          "price" : 88.6,
          "timestamp" : "2019-08-24 19:11:35",
          "pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
          "tags" : [
            "spring",
            "java"
          ]
        }
      }
    ]
  }
}

到了這里,關于ElasticSearch7.3學習(二十二)----Text字段排序、Scroll分批查詢場景解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Elasticsearch實戰(zhàn)(二十二)---ES數(shù)據(jù)建模與Mysql對比 一對一模型

    我們?nèi)绾伟袽ysql的模型合理的在ES中去實現(xiàn)? 就需要你對要存儲的數(shù)據(jù)足夠的了解,及對應用場景足夠的深入分析,才能建立一個合適的模型,便于你后期擴展 實體之間的關系: 一對一 模型 一對一(1:1):一個實體最多只能能另一個實體相關聯(lián),另一個實體如是。 例:一個只能

    2024年02月10日
    瀏覽(17)
  • Elasticsearch7學習筆記(尚硅谷)

    Elasticsearch7學習筆記(尚硅谷)

    Elasticsearch是一個 實時的分布式搜索和分析引擎 。它可以幫助你用前所未有的速度去處理大規(guī)模數(shù)據(jù)。它可以用于 全文搜索,結(jié)構(gòu)化搜索以及分析 ,當然你也可以將這三者進行組合。 Elasticsearch是一個建 立在全文搜索引擎 Apache Lucene? 基礎 上的搜索引擎,可以說Lucene是當今

    2024年01月23日
    瀏覽(28)
  • C++學習筆記(二十二)

    概念: 重載函數(shù)調(diào)用操作符的類,其對象常稱為函數(shù)對象 函數(shù)對象使用重載的 () 時,行為類似函數(shù)調(diào)用,也叫仿函數(shù) 本質(zhì): 函數(shù)對象(仿函數(shù))是一個類,不是一個函數(shù) 特點: 函數(shù)對象在使用時,可以像普通函數(shù)那樣調(diào)用,可以有參數(shù),可以有返回值 函數(shù)對象超出普通函數(shù)

    2024年01月18日
    瀏覽(21)
  • ElasticSearch7.6.x 學習筆記

    ElasticSearch7.6.x 學習筆記

    ElasticSearch,簡稱es,es是一個 開源 的 高擴展 的 分布式全文檢索引擎 ,它可以近乎實時的存儲、檢索數(shù)據(jù)。且本身擴展性很好,可以擴展到上百臺服務器,處理PB級別的數(shù)據(jù)。es也使用java開發(fā)并使用Lucene作為核心來實現(xiàn)所用索引和搜索的功能。但是,它的目的是通過簡單的

    2023年04月16日
    瀏覽(23)
  • ElasticSearch7.3學習(三十一)----Logstash基礎學習

    ElasticSearch7.3學習(三十一)----Logstash基礎學習

    一、Logstash基本介紹 Logstash 是一個功能強大的工具,可與各種部署集成。 它提供了大量插件,可幫助你解析,豐富,轉(zhuǎn)換和緩沖來自各種來源的數(shù)據(jù)(文件、數(shù)據(jù)庫......)。logstash簡單來說就是一個 數(shù)據(jù)抽取工具 ,將數(shù)據(jù)從一個地方轉(zhuǎn)移到另一個地方。 Logstash 是 Elastic 棧非

    2023年04月09日
    瀏覽(24)
  • opencv_c++學習(二十二)

    opencv_c++學習(二十二)

    圖中左側(cè)為邊緣檢測的效果,中間為圖像經(jīng)過二值化的效果,右圖為凸包檢測效果。 points:輸入的2D點集。 hull:輸出凸包的頂點。 clockwise:方向標志,當參數(shù)為true時,凸包順序為順時針方向,否則為逆時針方向。 returnPoints:輸出數(shù)據(jù)的類型標志,當參數(shù)為true時第二個參數(shù)輸出的

    2024年02月06日
    瀏覽(20)
  • ElasticSearch7.3學習(十八)----多索引搜索

    1、multi-index 多索引搜索 多索引搜索就是一次性搜索多個index下的數(shù)據(jù) 應用場景:生產(chǎn)環(huán)境log索引可以按照日期分開。 2、_all metadata的原理和作用 直接可以搜索所有的field,任意一個field包含指定的就可以搜索出來。我們在進行中搜索的時候,難道是對document中的每一個

    2024年02月11日
    瀏覽(30)
  • 自動駕駛學習筆記(二十二)——自動泊車算法

    自動駕駛學習筆記(二十二)——自動泊車算法

    #Apollo開發(fā)者# 學習課程的傳送門如下,當您也準備學習自動駕駛時,可以和我一同前往: ?《自動駕駛新人之旅》免費課程— 傳送門 《Apollo開放平臺9.0專項技術公開課》免費報名—傳送門 文章目錄 前言 感知算法 定位算法 規(guī)劃算法 控制算法 算法調(diào)試 總結(jié) ????????見《

    2024年02月03日
    瀏覽(33)
  • Java學習(二十二)--正則表達式

    ? ? 正則表達式是處理文本的利器; ? ? 正則表達式,又稱規(guī)則表達式,(Regular Expression,在代碼中常簡寫為regex、regexp或RE)。它是一個強大的字符串處理工具,可以對字符串進行 查找、提取、分割、替換等操作 ,是一種可以用于 模式匹配和替換 的規(guī)范; ? ? 一個正則表

    2024年01月25日
    瀏覽(18)
  • Elasticsearch基礎篇(四):Elasticsearch7.x的官方文檔學習(Set up Elasticsearch)

    You should rarely need to change Java Virtual Machine (JVM) options. If you do, the most likely change is setting the heap size. 通常情況下,您應該很少需要更改Java虛擬機(JVM)選項。如果需要更改,最常見的更改是設置堆大小。 The remainder of this document explains in detail how to set JVM options. You can set options

    2024年02月08日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包