白話Elasticsearch51-深入聚合數(shù)據(jù)分析之text field聚合以及fielddata原理

      網(wǎng)友投稿 873 2022-05-29

      文章目錄

      概述

      官網(wǎng)

      示例

      對于分詞的field執(zhí)行aggregation,報錯

      給分詞的field,設置fielddata=true,可執(zhí)行

      使用field.keyword,對分詞的field進行聚合,可執(zhí)行

      分詞field+fielddata的工作原理

      概述

      繼續(xù)跟中華石杉老師學習ES,第51篇

      課程地址: https://www.roncoo.com/view/55

      官網(wǎng)

      fielddata: 戳這里

      示例

      對于分詞的field執(zhí)行aggregation,報錯

      先構造下模擬索引及數(shù)據(jù)

      PUT /artisan_index { "mappings": { "artisan_type": { "properties": { "artisan_filed": { "type": "text" } } } } } PUT /artisan_index/artisan_type/1 { "artisan_filed": "artisan_1" } PUT /artisan_index/artisan_type/2 { "artisan_filed": "artisan_2" }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      GET /artisan_index/_mapping/artisan_type

      1

      白話Elasticsearch51-深入聚合數(shù)據(jù)分析之text field聚合以及fielddata原理

      我們建立的 artisan_filed是text類型,默認是分詞的,那么我們對該字段進行 aggs看下

      GET /artisan_index/artisan_type/_search { "size": 0, "aggs": { "group_by_artisan_field": { "terms": { "field": "artisan_filed" } } } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      報錯如下:

      { "type": "illegal_argument_exception", "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [artisan_filed] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead." }

      1

      2

      3

      4

      對分詞的field,直接執(zhí)行聚合操作,會報錯,大概意思是說,你必須要打開fielddata,然后將正排索引數(shù)據(jù)加載到內存中,才可以對分詞的field執(zhí)行聚合操作,而且會消耗很大的內存 .

      當然了,排序這種操作也是不行的。

      給分詞的field,設置fielddata=true,可執(zhí)行

      #刪除索引 DELETE artisan_index #創(chuàng)建索引,設置text類型的字段的fielddata為true PUT /artisan_index { "mappings": { "artisan_type": { "properties": { "artisan_filed": { "type": "text", "fielddata": true } } } } } #模擬數(shù)據(jù) PUT /artisan_index/artisan_type/1 { "artisan_filed": "artisan_1" } PUT /artisan_index/artisan_type/2 { "artisan_filed": "artisan_2" } #查看映射 GET /artisan_index/_mapping/artisan_type ---------------

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      # 聚合操作 GET /artisan_index/artisan_type/_search { "size": 0, "aggs": { "group_by_artisan_field": { "terms": { "field": "artisan_filed" } } } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      如果要對分詞的field執(zhí)行聚合操作,必須將fielddata設置為true

      使用field.keyword,對分詞的field進行聚合,可執(zhí)行

      #直接寫入數(shù)據(jù),讓ES自動創(chuàng)建索引 PUT /artisan_index/artisan_type/1 { "artisan_filed": "artisan_1" } PUT /artisan_index/artisan_type/2 { "artisan_filed": "artisan_2" } #查看映射 GET /artisan_index/_mapping/artisan_type

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      # artisan_filed.keyword es內置的keyword也可以在沒設置fielddata=true的情況下聚合 GET /artisan_index/artisan_type/_search { "size": 0, "aggs": { "group_by_artisan_field": { "terms": { "field": "artisan_filed.keyword" } } } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      artisan_filed.keyword es內置的keyword也可以在沒設置fielddata=true的情況下。

      當然了,如果對不分詞的field執(zhí)行聚合操作,直接就可以執(zhí)行,不需要設置fieldata=true

      分詞field+fielddata的工作原理

      doc value --> 不分詞的所有field,可以執(zhí)行聚合操作 --> 如果你的某個field不分詞,那么在index-time,就會自動生成doc value --> 針對這些不分詞的field執(zhí)行聚合操作的時候,自動就會用doc value來執(zhí)行。

      分詞field,是沒有doc value的。。。在index-time,如果某個field是分詞的,那么是不會給它建立doc value正排索引的,因為分詞后,占用的空間過于大,所以默認是不支持分詞field進行聚合的

      分詞field默認沒有doc value,所以直接對分詞field執(zhí)行聚合操作,是會報錯的

      對于分詞field,必須打開和使用fielddata,完全存在于純內存中。。。結構和doc value類似。。。如果是ngram或者是大量term,那么必將占用大量的內存。。。

      如果一定要對分詞的field執(zhí)行聚合,那么必須將fielddata=true,然后es就會在執(zhí)行聚合操作的時候,現(xiàn)場將field對應的數(shù)據(jù),建立一份fielddata正排索引,fielddata正排索引的結構跟doc value是類似的,但是只會將fielddata正排索引加載到內存中來,然后基于內存中的fielddata正排索引執(zhí)行分詞field的聚合操作

      如果直接對分詞field執(zhí)行聚合,報錯,提示讓我們開啟fielddata=true,告訴我們,會將fielddata uninverted index(正排索引),加載到內存,會耗費內存空間

      為什么fielddata必須在內存?分詞的字符串,需要按照term進行聚合,需要執(zhí)行更加復雜的算法和操作,如果基于磁盤和os cache,那么性能會很差

      Elasticsearch 實時流計算服務 CS 數(shù)據(jù)挖掘

      版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。

      上一篇:ps命令使用詳解
      下一篇:【昇騰】【每天進步一點點】ModelArts與Atlas 200 DK云端協(xié)同開發(fā)——行人檢測Demo(提供完整Demo)
      相關文章
      亚洲国产精品网站久久| 亚洲福利一区二区| 亚洲狠狠婷婷综合久久蜜芽| 亚洲乱码在线播放| 亚洲视频在线观看免费视频| 亚洲激情在线视频| 亚洲天堂男人天堂| 久久夜色精品国产噜噜噜亚洲AV| 久久综合九九亚洲一区| 亚洲V无码一区二区三区四区观看 亚洲αv久久久噜噜噜噜噜 | 亚洲色大成网站www尤物| 久久精品国产亚洲av麻豆图片| 亚洲成年人电影网站| 亚洲理论在线观看| 亚洲无限乱码一二三四区| 亚洲福利视频一区二区三区| 亚洲精品白色在线发布| 亚洲免费在线视频播放| 亚洲AV无码专区在线亚| 亚洲日本中文字幕天天更新| 亚洲欧美日韩中文字幕在线一区| 亚洲精品无码国产片| 国产亚洲欧美日韩亚洲中文色| 在线精品自拍亚洲第一区| 亚洲AV无码之日韩精品| 亚洲国产小视频精品久久久三级| 亚洲精品天堂成人片?V在线播放| 国产精品亚洲mnbav网站 | 亚洲六月丁香六月婷婷蜜芽| 亚洲一区二区三区免费在线观看| 亚洲av无码片区一区二区三区| 亚洲乱码在线观看| 亚洲AV无码资源在线观看| www亚洲精品少妇裸乳一区二区 | 亚洲黄色在线播放| 亚洲国产激情在线一区| 亚洲精品无码久久久久久| 午夜亚洲乱码伦小说区69堂| 精品国产亚洲一区二区在线观看 | 中文有码亚洲制服av片| www亚洲精品少妇裸乳一区二区|