解析ElasticSearch ElasticSearch字段類型解析
ElasticSearch
一、字段的類型Field type的詳解
(資料圖片僅供參考)
下面就是所有的字段類型
字符串類型text,keyword整數(shù)類型integer,long,short,byte浮點(diǎn)類型double,float,half_float,scaled_float邏輯類型boolean日期類型date范圍類型range二進(jìn)制類型binary復(fù)合類型數(shù)組類型array對(duì)象類型object嵌套類型nested地理類型地理坐標(biāo)類型geo_point地理地圖geo_shape特殊類型IP類型ip范圍類型completion令牌計(jì)數(shù)類型token_count附件類型attachment抽取類型percolator
1、字符串類型
1.1、text
會(huì)被分詞器解析, 生成倒排索引, 支持模糊、精確查詢, 不用于排序, 很少用于聚合,常用于全文檢索.
1.2、keyword
不進(jìn)行分詞,直接索引, 支持模糊、精確查詢, 支持聚合。如果需要為結(jié)構(gòu)化內(nèi)容, 比如 id、email、hostnames、狀態(tài)碼、標(biāo)簽等進(jìn)行索引,則推薦使用 keyword類型以進(jìn)行完全匹配. 比如我們需要查詢"已發(fā)貨"的訂單, 標(biāo)記為"已發(fā)布"的文章等.
ES會(huì)對(duì)"數(shù)值(numeric)"類型的字段(比如, integer, long)進(jìn)行優(yōu)化以支持范圍(range)查詢. 但是, 不是所有的數(shù)值類型的數(shù)據(jù)都需要使用"數(shù)值"類型, 比如產(chǎn)品id, 會(huì)員id, ISDN(出版社編號(hào)), 這些很少會(huì)被進(jìn)行范圍查詢, 通常都是精確匹配(term query).
keyword類型的查詢通常比numeric的要快, 如果不需要范圍查詢, 則建議使用keyword類型.
如果不確定使用哪一種, 可以通過(guò)multi-field同時(shí)設(shè)置keyword和numeric類型.
2、數(shù)值類型(numeric)
類型說(shuō)明取值范圍
byte8位有符號(hào)整數(shù)-128 ~ 127
short16位有符號(hào)整數(shù)-32768 ~ 32767
integer32位有符號(hào)整數(shù)-2,147,483,648 ~ 2,147,483,647 即:-2^31 ~ 2^32 - 1
long64位有符號(hào)整數(shù)-2^63 ~ 2^63 - 1
float32位單精度IEEE 754浮點(diǎn)類型, 有限值, 24bits2^-149 ~ (2 - 2^-23) · 2^127
double64位雙精度IEEE 754浮點(diǎn)類型, 有限值, 53bits2^-1074 ~ (2 - 2^-52) · 2^1023
half_float16位半精度IEEE 754浮點(diǎn)類型, 有限值, 11bits2^-24 ~ 65504
scaled_float帶有縮放因子scaling_factor的浮點(diǎn)數(shù), 可以當(dāng)整型看待
2.1、整型
byte, short, integer, long
2.2、浮點(diǎn)型
float, half_float, scaled_float, double 對(duì)于上面展示的3種浮點(diǎn)類型(float, half_float, scaled_float)來(lái)說(shuō), -0.00和+0.00是不同的值,使用term查詢-0.00時(shí)不會(huì)匹配+0.00, 反之亦然。對(duì)于范圍查詢(range query)來(lái)說(shuō)也是如此:如果上邊界是-0.00則無(wú)法匹配+0.00,如果下邊界是+0.00則不會(huì)匹配-0.00
數(shù)值類型使用的注意事項(xiàng):
在滿足業(yè)務(wù)需求的情況下, 盡量選擇范圍小的類型, 這與mysql等關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)要求是一致的. 字段占用的空間越小, 搜索和索引的效率越高(這個(gè)有點(diǎn)廢話, 數(shù)據(jù)量越小肯定越快了).
如果是浮點(diǎn)數(shù), 則也要優(yōu)先考慮使用scaled_float類型。對(duì)于scaled_float類型, 在索引時(shí)會(huì)乘以scaling_factor并四舍五入到最接近的一個(gè)long類型的值.
如果我們存儲(chǔ)商品價(jià)格只需要精確到分, 兩位小數(shù)點(diǎn), 把縮放因子設(shè)置為100, 那么浮點(diǎn)價(jià)格99.99存儲(chǔ)的是9999.
如果我們要存儲(chǔ)的值是2.34, 而因子是10, 那么會(huì)存儲(chǔ)為23, 在查詢/聚合/排序時(shí)會(huì)表現(xiàn)為這個(gè)值是2.3. 如果設(shè)置更大的因子(比如100), 可以提高精度, 但是會(huì)增加空間需求.
3、Object類型
JSON文檔天生具有層級(jí)關(guān)系: 文檔可能包含內(nèi)部對(duì)象, 而這個(gè)對(duì)象可能本身又包含對(duì)象, 就是可以包含嵌套的對(duì)象.
4、Date
JSON沒(méi)有日期(date)類型, 在ES中date類型可以表現(xiàn)為:
字符串格式的日期, 比如: “2015-01-01”, “2015/01/01 12:10:30”long類型的自 epoch (1970-1-1) 以來(lái)的毫秒數(shù)integer類型的自 epoch (1970-1-1) 以來(lái)的秒數(shù)(時(shí)間戳, timestamp)
在ES內(nèi)部, 日期被轉(zhuǎn)換為UTC格式(如果指定了時(shí)區(qū)), 并存儲(chǔ)為long類型的自 epoch (1970-1-1) 以來(lái)的毫秒數(shù).
查詢時(shí) , date類型會(huì)在內(nèi)部轉(zhuǎn)換為long類型的范圍查詢,聚合和存儲(chǔ)字段的結(jié)果根據(jù)與字段關(guān)聯(lián)的日期格式轉(zhuǎn)換回字符串。
5、ip類型
ip類型的字段只能存儲(chǔ)ipv4或ipv6地址.
二、屬性的詳解
1、fielddata字段數(shù)據(jù)
參考鏈接:https://www.cnblogs.com/rickie/p/11665168.html
默認(rèn)情況下是false
作用:把不能聚合、排序、通過(guò)腳本訪問(wèn)的字段變?yōu)榭梢跃酆稀⑴判颉⑼ㄟ^(guò)腳本訪問(wèn)的字段
text類型是不支持doc_value。所以要想對(duì)text類型的字段擁有聚合等功能,只能設(shè)置屬性的fielddata為true即可
缺點(diǎn):構(gòu)建和管理全部在內(nèi)存,也就是在JVM的內(nèi)存中。這意味著它本質(zhì)上是不可擴(kuò)展的。
fielddata可能會(huì)消耗大量的堆空間,尤其是在加載高基數(shù)(high cardinality)text字段時(shí)。一旦fielddata已加載到堆中,它將在該段的生命周期內(nèi)保留。此外,加載fielddata是一個(gè)昂貴的過(guò)程,可能會(huì)導(dǎo)致用戶遇到延遲命中。這就是默認(rèn)情況下禁用fielddata的原因。
如果需要對(duì) text 類型字段進(jìn)行排序、聚合、或者從腳本中訪問(wèn)字段值,則會(huì)出現(xiàn)如下異常:
Fielddata is disabled on text fields by default. Set fielddata=true on [your_field_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.
但是,在啟動(dòng)fielddata 設(shè)置之前,需要考慮為什么針對(duì)text 類型字段進(jìn)行排序、聚合、或腳本呢?通常情況下,這是不太合理的。
text字段在索引時(shí),例如New York,這樣的詞會(huì)被分詞,會(huì)被拆成new、york 2個(gè)詞項(xiàng),這樣當(dāng)搜索new 或 york時(shí),可以被搜索到。在此字段上面來(lái)一個(gè)terms的聚合會(huì)返回一個(gè)new的bucket和一個(gè)york的bucket,但是你可能想要的是一個(gè)單一new york的bucket。
怎么解決這一問(wèn)題呢?
你可以使用 text 字段來(lái)實(shí)現(xiàn)全文本查詢,同時(shí)使用一個(gè)未分詞的 keyword 字段,且啟用doc_values,來(lái)處理聚合操作。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-qlza4utS-1644556258944)(data:image/png;base64,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)]
(1) 使用my_field 字段用于查詢;
(2) 使用my_field.keyword 字段用于聚合、排序、或腳本; 注意:但是我試了試,不行,我也不知道為啥
PUT /user3{"mappings": {"properties": {"name":{"type": "text", "fields": {"keyword":{"type":"keyword" } } } } }}POST /user3/_doc{"name":"hello word 的數(shù)據(jù)結(jié)構(gòu) 你真棒"}GET /user3/_search{"query": {"match": {"name": "hello" } }, "aggs":{"testq":{"terms":{"field":"name.keyword" } } }}結(jié)果輸出:{"took" : 1, "timed_out" : false, "_shards" : {"total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : {"total" : {"value" : 1, "relation" : "eq" }, "max_score" : 0.2876821, "hits" : [ {"_index" : "user3", "_type" : "_doc", "_id" : "N_X1n34BgddXgx4111ZC", "_score" : 0.2876821, "_source" : {"name" : "hello word 的數(shù)據(jù)結(jié)構(gòu) 你真棒" } } ] }, "aggregations" : {"testq" : {"doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ {"key" : "hello word 的數(shù)據(jù)結(jié)構(gòu) 你真棒", "doc_count" : 1 } ] } }}
也可以使用 PUT mapping API 在現(xiàn)有text 字段上啟用 fielddata,如下所示:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-C0iFF2N6-1644556258949)(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARsAAADxCAYAAAD7hRNxAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABDMSURBVHhe7d2xy9zIGcfxS5cuVaor3RgMDhiDa1f5Awz3B1xzTewutYM7YxfmxeSSxgfuXpOzwcFpY3B4CxPewuEcG0wwOAncGdsB82JwM9HMaKSZ0SOtVtI+q119iw+8uxppJe3Mb0ezr2a/OH/hogGATSNsAKggbACoIGwAqCBsAKggbACoIGwAqCBsAKggbACoIGwAqCBsAKggbACoIGwAqCBsAKggbAa69Pij+f6DMXcffysuX98jc1Bs7+BQWjal2+bJ28/mx6PbwrLdcuWZce/B5s8ZpjA8bC6/MF8enmRemLNVmQNz5s6JOXX1IF3vwgNzuih7+nLxt7iN4Cdz5qt4vXnZ2bC5/8qcfHpl7knLdgxhs1tGhk0aCGdvxSHRI2zi59324rBaGp2wufdyP3o12D2Thk0IEh8whM16FMLm5lPz46f35slNYRmwYRsJGx8kemHjLmmePaq61fnf5y98a669Kf5+c2wuJev6Bu7LxM93OHztt1tqhoN/LXt5Ve2D1Xjt+jIglm6v3L/Ka3OlWlYe04eP5tr1ep1weSeF1o2j9+bk5cPG86usPr+hbL6/wr7Z85Ccw7hMv3MXjrG5fhCCO5yjUv4+Xz82d6vtdJTDJDZwGRUCQzlsikrixk9CRbYVxv1dNlD3d1Yx4+Vra+uJ1BW8Hs/xZePxHdeYkkaUb6+5jj/OdH+T7ZTHLgXN+QsPzfNPn83z+9Kybr3OrztuYd+i/a1Don4uPQ9ROFQNvnkeKi4s2sMmORdlsLSf3/K1CZqNmXaA+NaDqIx22JQVOG4AjcbQbPBiJe4lD4dAqrTZa4uNJN2eO6bsE11+zbDt46zxZEYMDPc7v4JsebKdIDkXcoOXz0VhRdik5yI7d8K6ra+DSUx8GRWbW9hkj1sral8jwkZspELYFI8ljdd0x1Isa/1UHvd1d9/zK+9zvjw77nLf/TF1hE2+njUmbBpl5NfGdDYYNuVlVdLbKXx1ZE5J62mETVTh3DqjKlZeeYMeYSM2knR7bv96fcqG9bLXiI0cGO51ft3f2TFl518MjeRcdITN1D2b8nESjATNRm00bKQyLoDuHJlzcTlLJWxCxf3YUknXkVfeoEfYNBpDXfGr7ZWf+GJ4VLLXKtfJ98l+3T1kYDgYFjbhmOrz3wyb/FwJ567lmOplw8KmNcCwMZsNm8K5qz8V5aJxHSloLKWwqRrBwE8xP+gp6GowjbAplI3Ir28bjC+TNKqkTBCOp9mYLX8u4tcaPjAc9Du/5XFX+1kc06Hd/3r/wr7F0kDIt2HlYSKV8eptrQ6b9u2k5xPTGR42OyuvdPvNfd399qm5ISzTloSWqAyAgR8E60i/BQv0Xn+JFhY2S6tM87oPavZhU/Yk0x4RprKQsAmXHO0VufXyqCKNDew48TItM2HDn1PYJHUispQe7zYs8DIKwDYQNgBUEDYAVBA2AFQQNgBUEDYAVBA2AFQQNgBUEDYAVBA2AFRMEzZuvpTP5qTAzP0AJBOEzf786BmAzZkgbOx8Kfw8CIBuhA0AFYQNABXjw2aPfjsawOYMDxsXMuMm0gawHPRsAKhgzAaACsIGgArCBoAKwgaAignCxt+uwLdSALpMEDaW7d1wIyaAdhOFDQB0I2wAqCBsAKggbACoIGwAqCBsAKggbACoIGwAqCBsAKggbACo2H7YXD82dz8Y8/2zR8Xjb821N8Xfb47NJansIj0yB/b8fHhtrojLJ3D4uti+MXcff1s8Ll/PvR9C2amEmR4Lz+8Ly7F3ZtCziSv3ssLm0uOPPY5VIWzKwNcLG38vHSGzLITNFvULGwXaYeN+QZWpZJdmBmHjA8ZX9IvmyrNNf6rOx2zCpgyYg0P7d/p+bARhs0g7MEBcV34XRPZT18oaaRVSYQzIyS49kmXWR3Pter28avzlGIZUpioXbSdvmHWIhEugdDvJcWR8g7fKXl5Y1hZK+TEJ5fL9HX5JVs5dNHayNMJmkXYmbFwjqXo8vhHHjbxuwKEhleuFdcpGWTfm0AjrEKgbZd0Y3XajBuzLxI21uS/1drKAyYLAlWsLkUhrOeGYGq/jgnNouOSmCZsbR+/Nydun5oawDPtrd8Imu7TKG6APm7RRxWWkxh73mqryecN0DTqERny5Ucv3xW8n6xEJjT5fr01bOXdM+SVnsr+FspeW7/M2uJBhgrXF2u2wiRqvHCY1sWFm28636SS9h/iyKNMIm2w7gknCRtoXMejq5dsOHno2y7RfPZuBYTO2Z5NTDZvGMa0wh54OYzaLtJth02esIic0sjwUmiHRfG3fm+gOkr5h4/cp64UIWkNpUHD0C0wZA8QYbrcGiCvNBroybKzsciIPBB8S8fLmN02WD5z2cr3DppBvqwqBMlDjZV73JZITnYe+x9QPYYPhdvYyahPWCQmMQNgsEmETIWy0+NsV+FZqWQibCGGjyPVuuBFzSXYgbADsA8IGgArCBoAKwgaACsIGgArCBoAKwgaACsIGgArCBoAKwgY77fSvvza//PqP5ue//av52dV/OPZv+5xdJq2D7SBssLNsoHzxux862TLSutC3P2FTTrXgp08oZ9RTuJ9qldYpJLLlw+aXyWYO7HW8/l6zZJqJbZy7kT9S94vf/EkMF4ktK20DuvYnbMr5X+YUNn1u7BwXNjW3naFho37uxv1IndyjeWW++ds7893f35mr3+fL6OHMAWGzMUKj3qCdCpsR89nYcZg8SH7153fm+H++l2QdP02XB4zhbNcejdn4RuJ7CLoNXbZDYaN97kaETbNX81/zFxs0Hz+Zf5WB0xY29G62ayEDxL4BHRyWn9quYcV/2zItn+jJp370fBtpms6gdbrOtnmI63302i/JusImfS1vWJhsf1pQ+01TGiL/Md/985355g8/mN//uzts7LrSNqFjUWETGnU8ThI3UmmMxT23am5jUc8eggszKWx80MTrd40BtYVNc50xPZft/0id/WpbChJrVdjYdaVtQseywqZsjHHDTBupb+D1YG3oEYXH6xgXNnLI5ftXk8NGKj8mbMaZ4kfqCJvdRdhkjTRp5O6SqPvbpHYThE0RFJLeYSNue3thE4zp2TQvo2pcRs0bYZM30qiB2mXDG+UEYbPG5ZsYNjPr2VQmHSCurQobBoi3i7ARGql77s3HIgSG9mqscWHjn+8fCnLYpMddPV5ju6ntDxBLX30Hq8KGr763i7CRGumaDV3WFTZ1o88l5cv9SMtEAdj6zVcckr53E5bZXo495l0NG6utd9MVNvRqtm8hYbOmtt4GpjEybCxuV9g9hE2D7wmM69Wg2zQ/Utc1fhPQo5kPwiaILlnkoEkvR0SD/h9noVzvxl/2jPmROjsOYwPFftNkv9q27N/2OcZo5oWwAaCCsAGggrABoIKwAaCCsAGggrABoIKwAaCCsAGggrABoIKwAaCCsEmEu7H9XdN+Aqs535C5a/s7kZn+RlirXdvfDSFsMm7KiVWNd9QMftPqtb/7JpkCpL3xrjsB2WCr6kPP/d13hE2GsNkBhM1OImwySQVtq0QzCpte+7t3fIP10522T1I2m7Dpub/7jrBZg+852J5EU1V5XMVrTkru1w29jlD5shn7Gp925adgZXiQ3Hs5fjqHXeF7e7L0fek6v+G9SXuKoQ7Y7fSqD6gQNkN0fpKVlTQJjvzTrK7k1XNlV7tuDL5MXGl95R4WOEsKm8Cdr9aeTb/z64Ir6Tk2P0iW06Mch7AZYlXlype7IInLNyu65Sp2GVJyQ/HrNSo7RF1h0//8hg+KY/E9cwibXgibIVZWrrQnE4eI1xE2ZQPwn7K+95MjbPpZGTbCubUa57fsdbYO6hI2vRA2Q/SoXHVFt8GSf0M0tGeDdawMm17nN/R28kvhCGHTC2EzRGN8RVIGypuiUjc+EYWwcRU2CqXk69LyuRGWOGbTOKexXuc3G39re9971Yc+JvqpnJkibAbKu+FSpfVlpMruwyZeX/xkLCvxynI9LDJsCq63GJ2/JBA6z294j9LzHd73/P3uUx/6CO/TycuH4vJdRthsUHtXXejZAFb5qxNjf+ZmjgibTenqwhM2aOF7NlxGoYe6O90WNBZhg8z9V/7yaeQvhc4ZYQNABWEDQAVhA0AFYQNABWEDQAVhA0AFYQNABWEDQAVhA0AFYQNABWGTKKcUKO/0bb9r2+u8o7jQdodwP2FfSj3ntmm/+TPomJdl49Y7v9gvhE3GB8jqxuCXpdMP5MaFTW11gNRWlx0eNuvsR5u+53cK567+ZL68c2TOCcugj7DJ9GsMur0DwmYYwmZeCJtM0qBap3skbKTlffQ7v9MgbOaFsFmHaxz2k1kQN8KsXNt0kavGfILORi7NNpeVdetnZfKwyfclXp4vi6X7nM9AOLzXMmZmwbO3TsyXh7LTl0O5B+Z0+diFUihz60G1Hf/8C3O2fFw9lwVYsn7h1NWDahlqhM0gfXsHvvFJIeIacBwKHfPYtoaNsE5e1gdN3Hto7rstk7xuGZb5vrTuh2O3m/ZS4kumtOxqU0xj2t2z8WGTBMxXR+ZU8TgEUp+waZbx2yVwmgibQUaGjQuJ5qe+a5zCz4W0NXKpfFpWev0++y7vd3fYCDZ8mbRKr7CJejLnLxyYM3fqoFgdNnXvqN7GqtddLsJmkCnCxn7qC3qHjbwPSVkx1IT1WvZn3bBxyxvbmXfYdPVA+oZNfAlVIWwaCJtBNtOzadPWyKfp2fgy6bEM6Nm4Xkx2TDvQs5kibPKeDWSEzSAjw6Zcv6uXEGtr5L4nUTdm/zjebvk6VSCVj5NwaYaNH2sR9lsKlNZlfrvbHLM5f/lFERY/mTNfCct6hE2+vg+ftNfiB6PTQIKMsBmkO2xCY21IeiF1w49VDbz1Uitt7Mlr2e3bRp8EU2j0nt2+XSfe9yqkSncfP3L71gzJ5rHVZfLjKfbz0B7DFsOmkH8zlX8btWogN1nfhowNoKy3JH37tWq7S0TYAFBB2ABQQdgAUEHYAFBB2ABQQdgAUEHYAFBB2ABQQdgAUEHYAFBB2ABQQdgAUEHYAFCxP2Fz/5W7S3iKO4UBTG/vejY3jt4XgfPK3BOWAdiePbyMemief3pvntyUlgHYFsIGgArCBoCKPQyb2+bJ28/mx6PbwjIA27KHYeP5gWK+mQLmgp4NABWM2QBQQdgAUEHYAFBB2ABQsXdhw+0KwDztT9hUN2LSqwHmaA8vowDMEWEDQAVhA0AFYQNABWEDQAVhA0AFYQNABWEDQAVhA0AFYQNAxfbD5uZT82P5e09MeAXsr/n0bNy9TdzXBOyrGV1G+ek8mTMY2E+EDQAVhA0AFTMKm4vm3svP5uTlQ3EZgN02q7Bxykmw+GYK2C/0bACoYMwGgArCBoAKwgaACsIGgIr5hA23KwB7bfthE92ISa8G2F8zuowCsM8IGwAqCBsAKggbACoIGwAqCBsAKggbACoIGwAqCBsAKggbACpGhY2b7MrdavDK3BOWA0AwQc/G363NDHsAukxzGWXv2H771NyQlgFAgbABoIKwAaBimrBxc9Iw8RWAdtOEjVMOFPPNFAABPRsAKhizAaCCsAGggrABoIKwAaBigrDhdgUAq40Km+pGTHo1AFaY5jIKAFYgbACoIGwAqCBsAKggbACoIGwAqCBsAKggbACoIGwAqCBsAKggbACoIGwAqCBsAKggbACoIGwAqCBsAKggbACoIGwAqCBsAKggbAAouGj+D+tatQzUWG/sAAAAAElFTkSuQmCC)]
2、doc_value
doc_values
默認(rèn)情況下,大部分字段是索引的,這樣讓這些字段可被搜索。倒排索引(inverted index)允許查詢請(qǐng)求在詞項(xiàng)列表中查找搜索項(xiàng)(search term),并立即獲得包含該詞項(xiàng)的文檔列表。
倒排索引(inverted index):
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-D0WU7j87-1644556258952)(data:image/png;base64,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)]
如果我們想要獲得所有包含 brown 的文檔的詞的完整列表,我們會(huì)創(chuàng)建如下查詢:
GET /my_index/_search{"query" : {"match" : {"body" : "brown" } }, "aggs" : {"popular_terms": {"terms" : {"field" : "body" } } }}
倒排索引是根據(jù)詞項(xiàng)來(lái)排序的,所以我們首先在詞項(xiàng)列表中找到 brown,然后掃描所有列,找到包含 brown 的文檔。我們可以快速看到 Doc_1 和 Doc_2 包含 brown 這個(gè) token。
然后,對(duì)于聚合部分,我們需要找到 Doc_1 和 Doc_2 里所有唯一的詞項(xiàng)。用倒排索引做這件事情代價(jià)很高: 我們會(huì)迭代索引里的每個(gè)詞項(xiàng)并收集 Doc_1 和 Doc_2 列里面 token。這很慢而且難以擴(kuò)展:隨著詞項(xiàng)和文檔的數(shù)量增加,執(zhí)行時(shí)間也會(huì)增加。
Doc values 通過(guò)轉(zhuǎn)置兩者間的關(guān)系來(lái)解決這個(gè)問(wèn)題。倒排索引將詞項(xiàng)映射到包含它們的文檔,doc values 將文檔映射到它們包含的詞項(xiàng):
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-deqcJ89G-1644556258957)(data:image/png;base64,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)]
當(dāng)數(shù)據(jù)被轉(zhuǎn)置之后,想要收集到 Doc_1 和 Doc_2 的唯一 token 會(huì)非常容易。獲得每個(gè)文檔行,獲取所有的詞項(xiàng),然后求兩個(gè)集合的并集。
Doc values 可以使聚合更快、更高效并且內(nèi)存友好。Doc values 的存在是因?yàn)榈古潘饕粚?duì)某些操作是高效的。
倒排索引的優(yōu)勢(shì):在于查找包含某個(gè)項(xiàng)的文檔,而對(duì)于從另外一個(gè)方向的相反操作并不高效,即:確定哪些項(xiàng)是否存在單個(gè)文檔里,聚合需要這種訪問(wèn)模式。
在 Elasticsearch 中,Doc Values 就是一種列式存儲(chǔ)結(jié)構(gòu),默認(rèn)情況下每個(gè)字段的 Doc Values 都是激活的,Doc Values 是在索引時(shí)創(chuàng)建的。當(dāng)字段索引時(shí),Elasticsearch 為了能夠快速檢索,會(huì)把字段的值加入倒排索引中,同時(shí)它也會(huì)存儲(chǔ)該字段的 Doc Values。
Elasticsearch 中的 Doc Values 常被應(yīng)用到以下場(chǎng)景:
對(duì)一個(gè)字段進(jìn)行排序?qū)σ粋€(gè)字段進(jìn)行聚合某些過(guò)濾,比如地理位置過(guò)濾某些與字段相關(guān)的腳本計(jì)算
因?yàn)槲臋n值(doc values)被序列化到磁盤,我們可以依靠操作系統(tǒng)的幫助來(lái)快速訪問(wèn)。當(dāng) working set 遠(yuǎn)小于節(jié)點(diǎn)的可用內(nèi)存,系統(tǒng)會(huì)自動(dòng)將所有的文檔值保存在內(nèi)存中,使得其讀寫十分高速;當(dāng)其遠(yuǎn)大于可用內(nèi)存,操作系統(tǒng)會(huì)自動(dòng)把 Doc Values 加載到系統(tǒng)的頁(yè)緩存中,從而避免了 jvm 堆內(nèi)存溢出異常。
因此,搜索和聚合是相互緊密纏繞的。搜索使用倒排索引查找文檔,聚合操作收集和聚合 doc values 里的數(shù)據(jù)。
doc values 支持大部分字段類型,但是text 字段類型不支持(因?yàn)閍nalyzed)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-LgoL0gRs-1644556258959)(data:image/png;base64,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)]
(1) status_code 字段默認(rèn)啟動(dòng) doc_values 屬性;
(2) session_id 顯式設(shè)置 doc_values = false,但是仍然可以被查詢;
如果確信某字段不需要排序或者聚合,或者從腳本中訪問(wèn)字段值,那么我們可以設(shè)置 doc_values = false,這樣可以節(jié)省磁盤空間。
3、executionHint
1、global ordinals
(1)what’s this?
當(dāng)我們使用doc values或者fielddata存儲(chǔ)時(shí),在磁盤中存儲(chǔ)的值不是真正的字段值,而是一個(gè)字典值(ordinal)。當(dāng)我們進(jìn)行聚合查詢的時(shí)候,es會(huì)把這個(gè)字典值跟真正字段值的映射字典加載到內(nèi)存中,并對(duì)結(jié)果集做映射,轉(zhuǎn)化為真正的值。這份映射關(guān)系是shard級(jí)別的,為這個(gè)shard里面是所有segment服務(wù),這也是global的體現(xiàn)。
(2)detail
字典關(guān)系是lazy init的,只有第一次使用的時(shí)候才會(huì)加載到內(nèi)存中。在es的內(nèi)存表現(xiàn)中提現(xiàn)成fielddata,這也是全keyword的index為什么也會(huì)有fielddata使用的原因。只會(huì)加載命中的segment的字典不會(huì)加載全部。字典關(guān)系在shard被觸發(fā)refresh以后就會(huì)失效。下次使用的時(shí)候需要再重新構(gòu)建。所以可以提高refresh_interval的值,減少fresh頻率提高字典的生存時(shí)間。
2、eager_global_ordinals
(1)what’s this?
當(dāng)在global ordinals的時(shí)候,refresh以后下一次查詢字典就需要重新構(gòu)建,在追求查詢的場(chǎng)景下很影響查詢性能。可以使用eager_global_ordinals,即在每次refresh以后即可更新字典,字典常駐內(nèi)存,減少了查詢的時(shí)候構(gòu)建字典的耗時(shí)。
(2)使用場(chǎng)景
因?yàn)檫@份字典需要常駐內(nèi)存,并且每次refresh以后就會(huì)重構(gòu),所以增大了內(nèi)存以及cpu的消耗。推薦在低寫高查、數(shù)據(jù)量不大的index中使用。
(3)使用
PUT my_index/_mapping{"properties": {"tags": {"type": "keyword", "eager_global_ordinals": true } }}
3、execution_hint
(1)what’ this?
上面介紹了global ordinal的使用場(chǎng)景,是doc_values以及fileddata的默認(rèn)數(shù)據(jù)架構(gòu)。除了這種模式,還可以選擇map模式。即不再使用字典而是直接把值加載到內(nèi)存中計(jì)算,減去了構(gòu)建字典的耗時(shí)。當(dāng)查詢的結(jié)果集很小的情況下,可以使用map的模式不去構(gòu)建字典。使用map還是global_ordinals的取決于構(gòu)建字典的開(kāi)銷與加載原始字典的開(kāi)銷。當(dāng)結(jié)果集大到一定程序,map的內(nèi)存開(kāi)銷的代價(jià)可能抵消了構(gòu)建字典的開(kāi)銷。
(2)how to use?
GET /_search{"aggs" : {"tags" : {"terms" : {"field" : "tags", "execution_hint": "map" } } }}
4、Shard Size
為了提高該聚合的精確度,可以通過(guò)shard_size參數(shù)設(shè)置協(xié)調(diào)節(jié)點(diǎn)向各個(gè)分片請(qǐng)求的詞根個(gè)數(shù),然后在協(xié)調(diào)節(jié)點(diǎn)進(jìn)行聚合,最后只返回size個(gè)詞根給到客戶端,shard_size >= size,如果shard_size設(shè)置小于size,ES會(huì)自動(dòng)將其設(shè)置為size,默認(rèn)情況下shard_size建議設(shè)置為(1.5 * size + 10)。
三、java實(shí)現(xiàn)對(duì)Es的curd
//match查詢age是20的條件 QueryBuilders.matchQuery("age",20); //term查詢age是20的條件 QueryBuilders.termQuery("age",20); //terms查詢age是20或者200,或者50的條件 QueryBuilders.termsQuery("age",20,200,50); //query_string全文檢索“xiumu” QueryBuilders.queryStringQuery("xiumu"); //query_string檢索username是“xiumu” QueryBuilders.queryStringQuery("xiumu").field("username"); //multi_match查詢字段username或者description的值是xiumu QueryBuilders.multiMatchQuery("xiumu","username","description"); //range查詢字段age的范圍是在[18-200]之間 QueryBuilders.rangeQuery("age").gte(18).lte(200); //exits查詢字段age有值 QueryBuilders.existsQuery("age"); //wildcard查詢字段description是以“男人”結(jié)尾的 QueryBuilders.wildcardQuery("description","*男人"); //bool查詢 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); //bool查詢里添加must多個(gè)條件 boolQueryBuilder.must(QueryBuilders.termQuery("age",20)); boolQueryBuilder.must(QueryBuilders.existsQuery("age")); boolQueryBuilder.must(QueryBuilders.wildcardQuery("description","*男人"));
(1)統(tǒng)計(jì)某個(gè)字段的數(shù)量 ValueCountBuilder vcb= AggregationBuilders.count("count_uid").field("uid");(2)去重統(tǒng)計(jì)某個(gè)字段的數(shù)量(有少量誤差) CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");(3)聚合過(guò)濾FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));(4)按某個(gè)字段分組TermsBuilder tb= AggregationBuilders.terms("group_name").field("name");(5)求和SumBuilder sumBuilder=AggregationBuilders.sum("sum_price").field("price");(6)求平均AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price");(7)求最大值MaxBuilder mb= AggregationBuilders.max("max_price").field("price"); (8)求最小值MinBuilder min=AggregationBuilders.min("min_price").field("price");(9)按日期間隔分組DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");(10)獲取聚合里面的結(jié)果TopHitsBuilder thb= AggregationBuilders.topHits("top_result");(11)嵌套的聚合NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");(12)反轉(zhuǎn)嵌套AggregationBuilders.reverseNested("res_negsted").path("kps ");
package com.robin.elasticsearch;import com.alibaba.fastjson.JSON;import com.robin.elasticsearch.common.DataUtil;import com.robin.elasticsearch.entity.User;import com.robin.elasticsearch.entity.User2;import com.robin.elasticsearch.entity.User3;import com.robin.elasticsearch.reponsity.UserMapper;import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;import org.elasticsearch.action.bulk.BulkRequest;import org.elasticsearch.action.bulk.BulkResponse;import org.elasticsearch.action.delete.DeleteRequest;import org.elasticsearch.action.delete.DeleteResponse;import org.elasticsearch.action.get.GetRequest;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.action.index.IndexRequest;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.action.search.SearchRequest;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.action.support.master.AcknowledgedResponse;import org.elasticsearch.action.update.UpdateRequest;import org.elasticsearch.action.update.UpdateResponse;import org.elasticsearch.client.RequestOptions;import org.elasticsearch.client.RestHighLevelClient;import org.elasticsearch.client.indices.CreateIndexRequest;import org.elasticsearch.client.indices.CreateIndexResponse;import org.elasticsearch.client.indices.GetIndexRequest;import org.elasticsearch.common.xcontent.XContentType;import org.elasticsearch.index.query.*;import org.elasticsearch.rest.RestStatus;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.aggregations.Aggregation;import org.elasticsearch.search.aggregations.AggregationBuilders;import org.elasticsearch.search.aggregations.Aggregations;import org.elasticsearch.search.aggregations.BucketOrder;import org.elasticsearch.search.aggregations.bucket.filter.Filters;import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator;import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;import org.elasticsearch.search.aggregations.bucket.histogram.HistogramAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.range.DateRangeAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.range.IpRangeAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.range.Range;import org.elasticsearch.search.aggregations.bucket.range.RangeAggregationBuilder;import org.elasticsearch.search.aggregations.bucket.terms.Terms;import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;import org.elasticsearch.search.aggregations.metrics.*;import org.elasticsearch.search.builder.SearchSourceBuilder;import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;import org.elasticsearch.search.sort.FieldSortBuilder;import org.elasticsearch.search.sort.SortBuilders;import org.elasticsearch.search.sort.SortOrder;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.domain.PageRequest;import org.springframework.data.elasticsearch.core.AggregationsContainer;import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;import org.springframework.data.elasticsearch.core.SearchHits;import org.springframework.data.elasticsearch.core.clients.elasticsearch7.ElasticsearchAggregations;import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;@SpringBootTestclass ESTests {@Autowired UserMapper userMapper; @Autowired RestHighLevelClient restHighLevelClient; @Autowired private ElasticsearchRestTemplate elasticsearchRestTemplate; //創(chuàng)建索引 @Test void createIndex() throws IOException {CreateIndexRequest request = new CreateIndexRequest("zkwz"); CreateIndexResponse exists = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT); } //刪除索引 @Test void isExistIndex() throws IOException {GetIndexRequest request = new GetIndexRequest("zkwz"); boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT); System.out.println(exists); } //刪除索引 @Test void deleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("user"); AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT); System.out.println(delete.isAcknowledged()); } //創(chuàng)建文檔 @Test void createDoc() throws IOException {IndexRequest request = new IndexRequest("user"); User user = new User("111", "cwx", 23); IndexRequest source = request.id("123").source(JSON.toJSONString(user), XContentType.JSON); String id = source.id(); IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT); System.out.println(index); } //獲取文檔的信息 @Test void getDocInfo() throws IOException {//創(chuàng)建獲取文檔的請(qǐng)求 GetRequest request = new GetRequest("user", "123"); boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT); System.out.println(exists); GetResponse documentFields = restHighLevelClient.get(request, RequestOptions.DEFAULT); String source = documentFields.getSourceAsString(); System.out.println(source); } //根據(jù)id更新文檔 @Test void updateDocById() throws IOException {UpdateRequest request = new UpdateRequest("user", "123"); request.doc(JSON.toJSONString(new User("111", "cwx", 33)), XContentType.JSON); UpdateResponse update = restHighLevelClient.update(request, RequestOptions.DEFAULT); RestStatus status = update.status(); System.out.println(status); } //根據(jù)id刪除文檔 @Test void deleteDocById() throws IOException {DeleteRequest request = new DeleteRequest("user", "123"); DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT); RestStatus status = delete.status(); System.out.println(status); } //批量創(chuàng)建文檔 @Test void createDocBulk() throws IOException {BulkRequest request = new BulkRequest(); User user1 = new User("777", "thegoodmen", 30); User user2 = new User("888", "thegoodwomen", 50); User user3 = new User("999", "thewellboy", 23); User user4 = new User("100", "thewellgirl", 43); User user5 = new User("121", "thegirlmen", 12); ArrayListlist = new ArrayList<>(); list.add(user1); list.add(user2); list.add(user3); list.add(user4); list.add(user5); for (User user : list) {request.add(new IndexRequest("user").source(JSON.toJSONString(user), XContentType.JSON)); } BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT); boolean status = bulk.hasFailures(); System.out.println(status); } //基本查詢 @Test void selectByAge() throws IOException {SearchRequest request = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //matchQuery是分詞之后再查詢的、termQuery是直接進(jìn)行匹配(但是這個(gè)查詢不到數(shù)據(jù),換這個(gè)可以matchPhraseQuery) MatchQueryBuilder builder = QueryBuilders.matchQuery("name", "good"); searchSourceBuilder.query(builder); request.source(searchSourceBuilder); SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT); Iteratoriterator = search.getHits().iterator(); while (iterator.hasNext()) {System.out.println(iterator.next()); } } //單條件查詢 @Test void select1() throws IOException {//左右模糊查詢,相當(dāng)于MySQL的%good% SearchHitssearchHits = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.queryStringQuery("good").field("name")), User.class, IndexCoordinates.of("user")); //精準(zhǔn)匹配,相當(dāng)于name="good" SearchHitssearchHits1 = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.termQuery("name", "good")), User.class, IndexCoordinates.of("user")); //普通匹配,相當(dāng)于name like "%good%" SearchHitssearchHits2 = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.matchQuery("name", "good")), User.class, IndexCoordinates.of("user")); //模糊匹配 SearchHitssearchHits3 = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.fuzzyQuery("name", "good")), User.class, IndexCoordinates.of("user")); //前綴匹配 SearchHitssearchHits6 = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.prefixQuery("name", "men")), User.class, IndexCoordinates.of("user")); //多字段的模糊匹配 SearchHitssearchHits7 = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.multiMatchQuery("aaa", "name")), User.class, IndexCoordinates.of("user")); //前綴匹配 SearchHitssearchHits8 = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.wildcardQuery("name", "m*n")), User.class, IndexCoordinates.of("user")); //多內(nèi)容多字段的模糊匹配 String[] strings = {"good", "men"}; SearchHitssearchHits9 = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.moreLikeThisQuery(new String[]{"aaa"}, MoreLikeThisQueryBuilder.Item.EMPTY_ARRAY)), User.class, IndexCoordinates.of("user")); for (org.springframework.data.elasticsearch.core.SearchHite1 : searchHits9.getSearchHits()) {System.out.println(e1.getContent()); } } //多條件查詢 @Test void select2() throws IOException {//數(shù)值型、日期、Ip的范圍查詢,相當(dāng)于 between 80 and 90 ,80包含,90不包含 SearchHitssearchHits1 = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("age").from(80).to(90).includeLower(true).includeUpper(false))), User.class, IndexCoordinates.of("user")); //范圍查詢、大于50小于等于90 SearchHitssearchHits2 = elasticsearchRestTemplate.search( new NativeSearchQuery(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("age").gt(50).lte(90))), User.class, IndexCoordinates.of("user")); for (org.springframework.data.elasticsearch.core.SearchHite1 : searchHits1.getSearchHits()) {System.out.println(e1.getContent()); } } //多條件查詢 @Test void select3() {// 排序 FieldSortBuilder price = SortBuilders.fieldSort("age").order(SortOrder.DESC); // 高亮顯示 HighlightBuilder highlightBuilder = new HighlightBuilder().field("name"); // 分頁(yè) PageRequest pageRequest = PageRequest.of(0, 2); // 查詢條件 BoolQueryBuilder queryBuilder1 = new BoolQueryBuilder().must(new MatchQueryBuilder("name", "陳萬(wàn)祥")); BoolQueryBuilder queryBuilder2 = new BoolQueryBuilder().must(new MatchPhraseQueryBuilder("loc", "武威市")); BoolQueryBuilder queryBuilder3 = new BoolQueryBuilder().must(QueryBuilders.queryStringQuery("蘭州市").field("name")); //求和 SumAggregationBuilder field = AggregationBuilders.sum("sum").field("age"); //求平均值 AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avg").field("age"); ValueCountAggregationBuilder countAggregationBuilder = AggregationBuilders.count("count").field("name"); // 組裝上述查詢條件 NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(queryBuilder1) .withSorts(price) .withHighlightBuilder(highlightBuilder) .withPageable(pageRequest) .build(); NativeSearchQuery searchQuery2 = new NativeSearchQueryBuilder() .withAggregations(field) .withAggregations(avgAggregationBuilder) .withAggregations(countAggregationBuilder) .build(); SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User2.class, IndexCoordinates.of("user")); for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent()); MaphighlightFields = hit.getHighlightFields(); System.out.println(highlightFields.toString()); } AggregationsContainer aggregations = user.getAggregations(); ElasticsearchAggregations aggregations1 = (ElasticsearchAggregations) aggregations; Aggregations aggregations2; if (aggregations1 != null) {aggregations2 = aggregations1.aggregations(); Sum sum = aggregations2.get("sum"); Avg avg = aggregations2.get("avg"); ValueCount count = aggregations2.get("count"); System.out.println(DataUtil.rmZeroSuper(sum.getValue())); System.out.println(DataUtil.rmZeroSuper(avg.getValue())); System.out.println(DataUtil.rmZeroSuper(count.getValue())); } } //最基礎(chǔ)的聚合查詢 @Test void select4() throws IOException {SearchRequest request = new SearchRequest("user"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchQuery("name", "yyy")); TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("ageAvg").field("age").size(10); sourceBuilder.aggregation(termsAggregationBuilder); AvgAggregationBuilder sumAggregationBuilder = AggregationBuilders.avg("avg").field("age"); sourceBuilder.aggregation(sumAggregationBuilder); request.source(sourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT); Aggregations aggregations = searchResponse.getAggregations(); Avg ageAvg = aggregations.get("avg"); System.out.println(ageAvg.getValue()); Terms terms = aggregations.get("ageAvg"); for (Terms.Bucket e1 : terms.getBuckets()) {System.out.println("年齡是" + e1.getKeyAsString() + "=====>" + "人數(shù)是" + e1.getDocCount()); } } //先分組再得到不同分組的指標(biāo)查詢 @Test void select5() {//先分組,并按指標(biāo)排序 TermsAggregationBuilder termsAggregationBuilder1 = AggregationBuilders.terms("team_count").field("team").order(BucketOrder.aggregation("max_age", true)); termsAggregationBuilder1.subAggregation(AggregationBuilders.max("max_age").field("age")); termsAggregationBuilder1.subAggregation(AggregationBuilders.avg("avg_age").field("age")); termsAggregationBuilder1.subAggregation(AggregationBuilders.min("min_age").field("age")); termsAggregationBuilder1.subAggregation(AggregationBuilders.sum("sum_age").field("age")); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withAggregations(termsAggregationBuilder1) .build(); SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1")); for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent()); } AggregationsContainer aggregations = user.getAggregations(); ElasticsearchAggregations aggregations1 = (ElasticsearchAggregations) aggregations; Aggregations aggregations2; if (aggregations1 != null) {aggregations2 = aggregations1.aggregations(); Terms terms = aggregations2.get("team_count"); //獲取聚合值的兩種方法 for (Terms.Bucket bucket : terms.getBuckets()) {Max max_age = bucket.getAggregations().get("max_age"); Min min_age = bucket.getAggregations().get("min_age"); Sum sum_age = bucket.getAggregations().get("sum_age"); Avg avg_age = bucket.getAggregations().get("avg_age"); System.out.println(bucket.getKeyAsString() + "的最大值是:" + max_age.getValue() + "的最小值是:" + min_age.getValue() + "的和是:" + sum_age.getValue() + "的平均值是:" + avg_age.getValue()); } for (Terms.Bucket bucket : terms.getBuckets()) {MapasMap = bucket.getAggregations().asMap(); double max_age = ((ParsedMax) asMap.get("max_age")).getValue(); double min_age = ((ParsedMin) asMap.get("min_age")).getValue(); double sum_age = ((ParsedSum) asMap.get("sum_age")).getValue(); double avg_age = ((ParsedAvg) asMap.get("avg_age")).getValue(); System.out.println(bucket.getKeyAsString() + "的最大值是:" + max_age + "的最小值是:" + min_age + "的和是:" + sum_age + "的平均值是:" + avg_age); } } } //區(qū)間分組查詢 @Test void select6() {HistogramAggregationBuilder histogramAggregationBuilder = AggregationBuilders.histogram("his_age").field("age").interval(10); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withAggregations(histogramAggregationBuilder) .build(); SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1")); for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent()); } AggregationsContainer aggregations = user.getAggregations(); ElasticsearchAggregations aggregations1 = (ElasticsearchAggregations) aggregations; Aggregations aggregations2; if (aggregations1 != null) {aggregations2 = aggregations1.aggregations(); Histogram terms = aggregations2.get("his_age"); for (Histogram.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount()); } } } //時(shí)間區(qū)間分組查詢 @Test void select7() {/* calendarInterval表示時(shí)間間隔是類型、minDocCount設(shè)置最小值、format設(shè)置輸出時(shí)間的格式化、 missing當(dāng)那個(gè)統(tǒng)計(jì)字段為null的時(shí)候,填充某個(gè)值,然后按照填充的值,統(tǒng)計(jì)計(jì)算 */ DateHistogramAggregationBuilder aggregationBuilder = AggregationBuilders.dateHistogram("his_birth") .field("birth") .calendarInterval(DateHistogramInterval.MONTH) .minDocCount(0) .format("yyyy-MM-dd") .missing("2021-07-27"); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withAggregations(aggregationBuilder) .build(); SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1")); for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent()); } ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations(); if (aggregations != null) {Histogram terms = aggregations.aggregations().get("his_birth"); for (Histogram.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount()); } } } //指定范圍區(qū)間分組查詢 @Test void select8() {/* calendarInterval表示時(shí)間間隔是類型、minDocCount設(shè)置最小值、format設(shè)置輸出時(shí)間的格式化、 missing當(dāng)那個(gè)統(tǒng)計(jì)字段為null的時(shí)候,填充某個(gè)值,然后按照填充的值,統(tǒng)計(jì)計(jì)算 */ RangeAggregationBuilder aggregationBuilder = AggregationBuilders.range("range_age") .field("age") .addUnboundedTo(10) .addRange(11, 30) .addRange(31, 50) .addUnboundedFrom(100); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withAggregations(aggregationBuilder) .build(); SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1")); for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent()); } ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations(); if (aggregations != null) {Range terms = aggregations.aggregations().get("range_age"); for (Range.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount()); //起始范圍值 Object from = bucket.getFrom(); //終止范圍值 Object to = bucket.getTo(); System.out.println(from + "\t" + to); } } } //指定時(shí)間范圍區(qū)間分組查詢 @Test void select9() {DateRangeAggregationBuilder aggregationBuilder = AggregationBuilders.dateRange("data_range_birth") .field("birth") .format("yyyy") .addUnboundedTo("2000") .addRange("2001", "2010") .addRange("2011", "2020") .addUnboundedFrom("2021"); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withAggregations(aggregationBuilder) .build(); SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1")); for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent()); } ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations(); if (aggregations != null) {Range terms = aggregations.aggregations().get("data_range_birth"); for (Range.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount()); } } } //指定ip區(qū)間分組查詢 @Test void select10() {//TODO 這個(gè)地方的ip類型不能用來(lái)聚合,加上.keyword也不行,不知如何解決 IpRangeAggregationBuilder aggregationBuilder = AggregationBuilders.ipRange("ip_range") .field("ip") .addUnboundedTo("192.168.0.0") .addRange("192.168.0.1", "192.168.0.122") .addRange("192.168.5.0", "192.168.7.134") .addUnboundedFrom("192.168.12.122"); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withAggregations(aggregationBuilder) .build(); SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1")); for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {System.out.println(hit.getContent()); } ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations(); if (aggregations != null) {Range terms = aggregations.aggregations().get("ip_range"); for (Range.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount()); } } } //指定過(guò)濾條件分組查詢 @Test void select11() {FiltersAggregationBuilder aggregationBuilder = AggregationBuilders.filters("filter", new FiltersAggregator.KeyedFilter("men", QueryBuilders.termQuery("sex", "true")), new FiltersAggregator.KeyedFilter("women", QueryBuilders.termQuery("sex", "false"))); // 高亮顯示 HighlightBuilder highlightBuilder = new HighlightBuilder().field("sex").preTags("").postTags(""); NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withAggregations(aggregationBuilder) .withHighlightBuilder(highlightBuilder) .build(); SearchHitsuser = elasticsearchRestTemplate.search(searchQuery, User3.class, IndexCoordinates.of("user1")); for (org.springframework.data.elasticsearch.core.SearchHithit : user.getSearchHits()) {MaphighlightFields = hit.getHighlightFields(); System.out.println(hit.getContent()); System.out.println(highlightFields.toString()); } ElasticsearchAggregations aggregations = (ElasticsearchAggregations) user.getAggregations(); if (aggregations != null) {Filters terms = aggregations.aggregations().get("filter"); for (Filters.Bucket bucket : terms.getBuckets()) {System.out.println(bucket.getKeyAsString() + "的數(shù)量是:" + bucket.getDocCount()); } } }}
四、命令的方式實(shí)現(xiàn)對(duì)Es的curd
DELETE /user3PUT /user{"settings": {"number_of_replicas": 2, "number_of_shards": 3 }, "mappings": {"properties": {"name":{"type": "text", "analyzer": "ik_max_word" }, "sex":{"type": "boolean" }, "age":{"type": "long" }, "loc":{"type": "text", "analyzer": "ik_max_word" }, "team":{"type": "keyword" }, "birth":{"type": "date" }, "id":{"type": "ip" }, "country":{"type": "keyword" }, "habby":{"type": "text" }, "balance":{"type": "float" } } }}POST /user/_doc/{"name":"陳萬(wàn)祥", "age":12, "sex":true, "loc":"甘肅省武威市", "team":"red", "birth":"1998-01-10", "ip":"192.168.0.3", "country":"china", "habby":["basketball","sing","dance"], "balance":8700.12}POST /user/_doc/{"name":"陳萬(wàn)祥", "age":122, "sex":true, "loc":"甘肅省武威市", "team":"blue", "birth":"1998-01-10", "ip":"192.168.0.", "country":"france", "habby":["basketball","sing"], "balance":82111}POST /user/_doc/{"name":"勞霞明", "age":21, "sex":true, "loc":"廣西欽州市", "team":"red", "birth":"1997-01-10", "ip":"192.168.3.11", "country":"china", "habby":["swming","dance"], "balance":800.12}POST /user/_doc/{"name":"汪明", "age":24, "sex":false, "loc":"天津市", "team":"green", "birth":"1998-02-10", "ip":"192.165.0.3", "country":"china", "habby":["sing","read"], "balance":9000}POST /user/_doc/{"name":"蔡徐坤", "age":12, "sex":true, "loc":"甘肅省蘭州市", "team":"green", "birth":"1998-03-10", "ip":"192.167.0.0", "country":"france", "habby":["game","eat"], "balance":2300}POST /user/_doc/{"name":"愛(ài)英斯坦", "age":45, "sex":true, "loc":"甘肅省張掖市", "team":"blue", "birth":"2003-06-10", "ip":"192.168.0.32", "country":"england", "habby":["basketball","sing","dance"], "balance":6900}POST /user/_doc/{"name":"歐拉", "age":65, "sex":false, "loc":"甘肅省天水市", "team":"blue", "birth":"2021-08-10", "ip":"192.168.6.3", "country":"china", "habby":["basketball","dance"], "balance":4300}POST /user/_doc/{"name":"上帝", "age":22, "sex":false, "loc":"西方世界", "team":"black", "ip":"192.168.3.3", "country":"england", "habby":["eat","game","sing"], "balance":12000.12}GET /user/_doc/_searchGET /user/_doc/_search{"query":{"term":{"name":"陳萬(wàn)祥" } }, "from":0, "size":10, "sort":[{"age":"desc" }], "highlight":{"fields":{"name":{} } }}#求出user索引的和GET /user/_doc/_search{"aggs":{"user1_sum":{"sum":{"field":"age" } } }}#求出user索引的最大值GET /user/_doc/_search{"size":0, "aggs":{"user1_max":{"max":{"field":"age" } } }}#根據(jù)team字段聚合分組、并得到每個(gè)分組的求和、最大值、最小值、平均值GET /user/_doc/_search{"size":0, "aggs":{"user1_term":{"terms":{"field":"team" }, "aggs":{"term_sum":{"sum":{"field":"age" } }, "term_max":{"max":{"field":"age" }}, "term_min":{"min":{"field":"age" }}, "term_avg":{"avg":{"field":"age" }} } } }}#查看工資范圍的百分比GET /user/_search{"size": 0, "aggs": {"balance_a": {"percentile_ranks": {"field": "balance", "values": [2000,4000,6000,8000,10000] } } }}#查看一些計(jì)數(shù)、最小值、最大值、平均值、求和分別是多少GET /user/_search{"size": 0, "aggs": {"balance_a": {"stats": {"field": "balance" } } }}#查看一些其他的指標(biāo)結(jié)果GET /user/_search{"size": 0, "aggs": {"balance_a": {"extended_stats": {"field": "age" } } }}#查看對(duì)字段sex的聚合GET /user/_search{"size": 0, "aggs": {"sex_a": {"terms": {"field": "sex" } } }}#聚合并排序GET /user/_search{"size": 0, "aggs": {"sex_a": {"terms": {"field": "team", "order": {"max_a": "desc" } }, "aggs":{"max_a":{"max":{"field": "age" } } } } }}#聚合支持腳本GET /user/_search{"size": 0, "aggs": {"sex_a": {"terms": {"script": "doc["team"].value" } } }}#篩選出包含指定詞語(yǔ)和不包含的GET /user/_search{"size": 0, "aggs": {"term_a": {"terms": {"field": "age", "include": "*.市" } } }}#------------------------------------------------DELETE user3#多字段聚合的實(shí)現(xiàn)方式:#1、通過(guò)腳本合并字段#2、使用copy_to方法合并兩個(gè)字段PUT /user3{"mappings": {"properties": {"name":{"type": "text", "fielddata": true } } }}PUT /user3{"mappings": {"properties": {"name":{"type": "text", "fields": {"keyword":{"type":"keyword" } } } } }}POST /user3/_doc{"name":"hello word"}GET /user3/_search{"query": {"match": {"name": "hello" } }, "aggs":{"testq":{"terms":{"field":"name.keyword" } } }}PUT test3POST test3/stu{"name":"cwx"}POST test3/tes{"name":"lxm"}
五、集群
六、優(yōu)化
1、聚合為什么慢?
大多數(shù)時(shí)候?qū)蝹€(gè)字段的聚合查詢還是非常快的, 但是當(dāng)需要同時(shí)聚合多個(gè)字段時(shí),就可能會(huì)產(chǎn)生大量的分組,最終結(jié)果就是占用 es 大量?jī)?nèi)存,從而導(dǎo)致 OOM 的情況發(fā)生。 實(shí)踐應(yīng)用發(fā)現(xiàn),以下情況都會(huì)比較慢: 1)待聚合文檔數(shù)比較多(千萬(wàn)、億、十億甚至更多); 2)聚合條件比較復(fù)雜(多重條件聚合); 3)全量聚合(翻頁(yè)的場(chǎng)景用)。
2、聚合優(yōu)化方案探討
參考鏈接:https://blog.csdn.net/laoyang360/article/details/79253294
優(yōu)化方案一:默認(rèn)深度優(yōu)先聚合改為廣度優(yōu)先聚合。
"collect_mode" : "breadth_first"
depth_first 直接進(jìn)行子聚合的計(jì)算 breadth_first 先計(jì)算出當(dāng)前聚合的結(jié)果,針對(duì)這個(gè)結(jié)果在對(duì)子聚合進(jìn)行計(jì)算。 優(yōu)化方案二: 每一層terms aggregation內(nèi)部加一個(gè) “execution_hint”: “map”。
"execution_hint": "map"
Map方式的結(jié)論可簡(jiǎn)要概括如下: 1)查詢結(jié)果直接放入內(nèi)存中構(gòu)建map,在查詢結(jié)果集小的場(chǎng)景下,速度極快; 2)但如果待結(jié)果集合很大的情況,map方式不一定也快。
3、運(yùn)用 shard_size 來(lái)提高 term aggregation 的精度
參考鏈接:https://blog.csdn.net/UbuntuTouch/article/details/104141398
請(qǐng)求的大小(size)越大,結(jié)果將越準(zhǔn)確,但計(jì)算最終結(jié)果的成本也將越高(這兩者都是由于在分片級(jí)別上管理的優(yōu)先級(jí)隊(duì)列更大,并且節(jié)點(diǎn)和客戶端之間的數(shù)據(jù)傳輸也更大)。
shard_size 參數(shù)可用于最大程度地減少請(qǐng)求的大小帶來(lái)的額外工作。 定義后,它將確定協(xié)調(diào)節(jié)點(diǎn)將從每個(gè)分片請(qǐng)求多少個(gè)術(shù)語(yǔ)。 一旦所有分片都做出響應(yīng),協(xié)調(diào)節(jié)點(diǎn)便會(huì)將它們縮減為最終結(jié)果,該最終結(jié)果將基于size參數(shù)-這樣一來(lái),可以提高返回條款的準(zhǔn)確性,并避免流回大量存儲(chǔ)桶的開(kāi)銷給客戶。
注意:shard_size 不能小于 size(因?yàn)橐饬x不大)。 啟用時(shí),Elasticsearch 將覆蓋它并將其重置為等于大小。
缺省 shard_size為(size* 1.5 + 10)。
Terms aggregation 對(duì)于大量數(shù)據(jù)來(lái)說(shuō)通常是不精確的
我們先來(lái)看一下如下的一個(gè)圖:
從上面的圖中,在 shard_size 為3的情況下,我們想對(duì) geoip.country_name 這個(gè)字段來(lái)進(jìn)行 terms aggregation:
從 shard 0 中提取文檔數(shù)靠前的前三個(gè),它們分別是 USA,India 及 France。它們的文檔數(shù)分別是5,4及4。 從 shard 1 中提取文檔數(shù)靠前的前單個(gè),它們分別是 USA,India 及 Japan。它們的文檔數(shù)分別是4,5及3。 那么總的文檔數(shù)是:
USA為:5 + 4 = 9India為:4 + 5 = 9France為:4 + 0 = 4Japan為: 3 + 0 = 3
根據(jù)上面的計(jì)算,返回的結(jié)果將會(huì)是 USA,India 及 France。細(xì)心的開(kāi)發(fā)者可能馬上可以看出來(lái),在上面的統(tǒng)計(jì)中國(guó)其實(shí)是不精確的,這是因?yàn)樵? shard 0 中,我們可以看見(jiàn) Japan 有3個(gè)文檔沒(méi)有被統(tǒng)計(jì)進(jìn)去。這個(gè)統(tǒng)計(jì)是基于我們對(duì) shard_size 為3的情況。假如我們把 shard_size 提供到4,情況馬上就會(huì)不同,而且更加接近我們的實(shí)際的統(tǒng)計(jì)數(shù)據(jù)的結(jié)果。在這種情況下,Japan 將會(huì)有 3 + 6 共6很個(gè)文檔,應(yīng)該是排名第3。
我們可以修改我們的請(qǐng)求如下:
GET logs_server*/_search{ "size": 0, "aggs": { "top_10_urls": { "terms": { "field": "geoip.country_name.keyword", "size": 10, "shard_size": 100 } } }}
我們可以通過(guò)增加 shard_size 來(lái)提高數(shù)據(jù)的精確性,但是必須注意的是這樣的代價(jià)是計(jì)算的成本增加,特別是針對(duì)大量數(shù)據(jù)而言。
標(biāo)簽:
相關(guān)推薦:
精彩放送:
- []世界訊息:三川智慧:截至3月31日,公司股東總數(shù)是30,425戶
- []環(huán)球觀熱點(diǎn):青海華鼎:截止2023年3月31日公司股東人數(shù)為31900名
- []當(dāng)前焦點(diǎn)!最牛大賺400%!剛剛 基金公司長(zhǎng)期業(yè)績(jī)榜單來(lái)了
- []【全球時(shí)快訊】思南人B隊(duì)0-3金海綠化 羅志偉取得進(jìn)球
- []天天熱消息:郵輪出境游重新起航,上海、深圳率先試點(diǎn)恢復(fù)
- []全球新動(dòng)態(tài):厭倦上班的年輕人,辭職開(kāi)民宿:本以為要虧本,卻意外爆滿
- []即時(shí):哈登帶傷出戰(zhàn),大帝陷入重圍,76人季后賽敲響警鐘
- []國(guó)瑞健康:2022年實(shí)現(xiàn)收入33.4億元
- []世界速讀:朗詩(shī)綠色管理:2022年歸屬股東凈虧損25.88億元
- []節(jié)能鐵漢:公司正在按照相關(guān)程序推進(jìn)以簡(jiǎn)易程序向特定對(duì)象發(fā)行股票事項(xiàng)
- []觀熱點(diǎn):聚焦IPO | 四月第一周再迎10家新股申購(gòu),客戶依賴問(wèn)題需重點(diǎn)關(guān)注
- []全球今熱點(diǎn):唐人神:公司截至3月31日的股東人數(shù)將在2023年一季報(bào)中披露,還
- []大地海洋:截至2023年3月31日,公司共有股東3611戶
- []環(huán)球微資訊!運(yùn)機(jī)集團(tuán):您好投資者,截止3.31公司股東人數(shù)為10354戶
- []個(gè)人養(yǎng)老金投資最新成績(jī)出爐 七成養(yǎng)老FOF跑輸基準(zhǔn)
- []估值持續(xù)修復(fù) 基金一季度業(yè)績(jī)迎“開(kāi)門紅”
- []全球快看點(diǎn)丨派息分紅是利好還是利空
- []每日時(shí)訊!炒股會(huì)虧錢嗎
- []信息:外資機(jī)構(gòu)大舉加倉(cāng)ETF 新銳基金經(jīng)理產(chǎn)品成自購(gòu)熱門
- []美團(tuán)企業(yè)版即將上線;阿里商旅推出因私預(yù)訂功能 | 一周商旅動(dòng)態(tài)
- []全球快看點(diǎn)丨國(guó)債逆回購(gòu)周五買幾天合算
- []每日精選:萌翻啦!第十七屆華南(廣州)寵物嘉年華在華農(nóng)舉行
- []每日速遞:光儲(chǔ)那通事?|?戶用光儲(chǔ)系統(tǒng),你選對(duì)了嗎?
- []全球?qū)崟r(shí):最快4.8年可回本!光伏巨頭戶用光儲(chǔ)系統(tǒng)經(jīng)濟(jì)性分析
- []環(huán)球?qū)崟r(shí):美股期指什么意思
- []今熱點(diǎn):投資也有“鄙視鏈”?不怕被“看不起” 這只超級(jí)牛基創(chuàng)造了傳奇!
- []天天通訊!九安醫(yī)療為什么漲這么多
- []【全球新要聞】銀河證券:當(dāng)前階段銀行板塊估值性價(jià)比高 配置價(jià)值凸顯
- []環(huán)球即時(shí):繳費(fèi)基數(shù)是啥意思,參保人繳納社會(huì)保險(xiǎn)的基本基數(shù)
- []醫(yī)無(wú)憂保險(xiǎn)具體條款
- []兩部門發(fā)文要推進(jìn)的“帶押過(guò)戶”到底是什么?
- []【全球時(shí)快訊】2022現(xiàn)在車險(xiǎn)可以提前多久買,最少30天
- []每日速讀!西安雁塔區(qū)推出2宗共148畝商住用地 掛牌截止時(shí)間為5月6日
- []“帶押過(guò)戶”全面推廣 已有百余城開(kāi)閘
- []雅居樂(lè)獲授23.08億港元及3693.6萬(wàn)美元定期貸款融資
- []不斷加碼,貝殼累計(jì)回購(gòu)金額近2.3億美金
- []全球焦點(diǎn)!職工醫(yī)保余額怎么查詢
- []全球觀焦點(diǎn):公積金租房提取多久可以申請(qǐng)一次,三個(gè)月
- []康師傅方便面:長(zhǎng)期穩(wěn)健經(jīng)營(yíng),多元細(xì)分產(chǎn)品塑造競(jìng)爭(zhēng)優(yōu)勢(shì)
- []在元宇宙里,詠聲動(dòng)漫正在掀起新生代文化娛樂(lè)熱潮
- []在元宇宙里,詠聲動(dòng)漫正在掀起新生代文化娛樂(lè)熱潮
- []當(dāng)前聚焦:k線怎么看漲跌
- []全球觀點(diǎn):跌停板吸籌的特征
- []動(dòng)態(tài):五行火行業(yè)比較有前景的行業(yè)
- []【全球播資訊】股票市場(chǎng)是什么
- []熱點(diǎn)評(píng)!三峽能源股票前景怎么樣
- []【世界速看料】玉米面營(yíng)養(yǎng)價(jià)值及功效_玉米的營(yíng)養(yǎng)價(jià)值及功效與作用
- []世界熱頭條丨中指研究院企業(yè)研究總監(jiān)劉水:前3月重點(diǎn)房企銷售出現(xiàn)正增長(zhǎng)
- []世界最資訊丨標(biāo)榜股份:公司主營(yíng)業(yè)務(wù)為汽車尼龍管路及連接件等系列產(chǎn)品的研發(fā)、生產(chǎn)和銷售
- []【焦點(diǎn)熱聞】阿里變陣,飛豬“提前開(kāi)跑”;東呈推出超級(jí)IP青貓 | 一周速覽
- []世界聚焦:4月新規(guī)來(lái)了
- []【環(huán)球速看料】閏土股份:截至2023年3月31日,公司的股東人數(shù)為37,556
- []天天熱門:鵬華基金經(jīng)理金笑非:醫(yī)藥板塊開(kāi)啟投資新周期 中國(guó)創(chuàng)新藥未來(lái)三五年會(huì)成為全球高地
- []環(huán)球快資訊丨亞朵連續(xù)四年盈利;百度仍為攜程最大股東 | 大公司簡(jiǎn)報(bào)
- []【天天新要聞】新紐科技完成穩(wěn)中求進(jìn) 2022年實(shí)現(xiàn)收入及凈利潤(rùn)雙增長(zhǎng)
- []首席經(jīng)濟(jì)學(xué)家七人談:二季度GDP同比增速或超7% 財(cái)政貨幣政策將繼續(xù)發(fā)力
- []【播資訊】納斯:等賽季結(jié)束會(huì)花幾周時(shí)間考慮去留
- []天天通訊!3月基金發(fā)行迎“小陽(yáng)春” 增量資金等待時(shí)機(jī)進(jìn)場(chǎng)
- []熱點(diǎn)在線丨重磅!2022年公募基金年報(bào)數(shù)據(jù)全解!
- []奕東電子:公司的動(dòng)力電池管理系統(tǒng)FPC根據(jù)設(shè)計(jì)和要求可與各類電池進(jìn)行適配
- []天天即時(shí):*ST皇臺(tái):待公司2022年年度報(bào)告披露后,若符合深交所股票上市規(guī)則的相關(guān)規(guī)定,公司會(huì)向深交所提出申請(qǐng)
- []當(dāng)前速讀:加滿一箱油少花13元!油價(jià)迎今年來(lái)最大降幅
- []愛(ài)仕達(dá):公司暫未涉及鄉(xiāng)村振興相關(guān)的業(yè)務(wù)
- []首批試點(diǎn)!市中醫(yī)院入選胃癌規(guī)范化診療“國(guó)家隊(duì)”
- []【環(huán)球新視野】德信中國(guó):2022年總收入約人民幣221.45億元
- []全球快播:給寶寶買保險(xiǎn)怎么選擇
- []環(huán)球微頭條丨公積金第三次貸款條件
- []富力地產(chǎn):2022年實(shí)現(xiàn)收入352億元
- []如何根據(jù)身材挑選T恤衫 怎么根據(jù)身材挑選T恤衫
- []每日時(shí)訊!明發(fā)集團(tuán):2022年綜合收入約105.684億元
- []環(huán)球簡(jiǎn)訊:綠地香港:2022年實(shí)現(xiàn)收入266.14億元
- []【環(huán)球聚看點(diǎn)】通鼎互聯(lián):公司密切關(guān)注6G技術(shù)發(fā)展方向,未來(lái)將結(jié)合主營(yíng)業(yè)務(wù)適時(shí)布局相關(guān)產(chǎn)品及解決方案
- []當(dāng)前滾動(dòng):支付寶申請(qǐng)失業(yè)補(bǔ)助金成功后怎么領(lǐng)取
- []華僑城亞洲:2022年權(quán)益持有人應(yīng)占虧損約19.13億元
- []國(guó)壽財(cái)是哪個(gè)保險(xiǎn)公司
- []第三者責(zé)任險(xiǎn)只賠人不賠車嗎,都賠
- []世界消息!詐騙5萬(wàn)元能判幾年_5萬(wàn)元左右最好的車
- []正榮服務(wù):2022年實(shí)現(xiàn)收入11.41億元
- []天天視點(diǎn)!灰谷狩獵的三個(gè)怪在線觀看_灰谷狩獵的三個(gè)怪
- []快看點(diǎn)丨億達(dá)中國(guó):2022年收入為人民幣45.32億元
- []播報(bào):市場(chǎng)下行期,融創(chuàng)仍穩(wěn)步降負(fù)債:2022年整體有息負(fù)債減少642億
- []【環(huán)球新要聞】農(nóng)業(yè)銀行2022年歸母凈利2591.40億 2023年力爭(zhēng)新增縣域貸款超萬(wàn)億
- []環(huán)球信息:合景泰富2022全年按權(quán)益合并收入約為人民幣224.62億元
- []全球今日?qǐng)?bào)丨福晟國(guó)際:2022年收入約為人民幣17.93億元
- []大悅城地產(chǎn):2022年物業(yè)開(kāi)發(fā)收入同比增長(zhǎng)130.6%
- []融信服務(wù):2022年總收益約為人民幣8.76億元
- []每日短訊:本鋼板材:公司會(huì)按照季度報(bào)告披露要求,在規(guī)定時(shí)間內(nèi)披露
- []順絡(luò)電子:3月30日公司高管袁金鈺減持公司股份合計(jì)321.19萬(wàn)股
- []消息!港龍中國(guó)2022年業(yè)績(jī):穩(wěn)健經(jīng)營(yíng),提質(zhì)增效
- []環(huán)球熱文:遠(yuǎn)大中國(guó):2022年收入約人民幣14.71億元
- []每日動(dòng)態(tài)!佳云科技控股股東所持1.35億股股份被司法凍結(jié),持股方為佳兆業(yè)商業(yè)集團(tuán)
- []北京市掛牌兩宗住宅用地,總起拍價(jià)56.3億元,涉及大興區(qū)、豐臺(tái)區(qū)
- []保利發(fā)展2022年報(bào):穿越行業(yè)周期波動(dòng) 企穩(wěn)高質(zhì)量發(fā)展之路
- []【環(huán)球快播報(bào)】港龍中國(guó)地產(chǎn):2022年收益約為人民幣118.92億元
- []全球播報(bào):中國(guó)三迪:2022年總收入約為人民幣34.49億元
- []天天關(guān)注:大悅城地產(chǎn):2022年實(shí)現(xiàn)收入208.31億元
- []中泰證券發(fā)布中泰財(cái)富與家族信托等金融服務(wù)
- []保利發(fā)展:3月31日公司高管黃海增持公司股份合計(jì)2萬(wàn)股
- []三立期貨3月31日基差:一張圖盡覽有色金屬、黑色系、能源化工和農(nóng)產(chǎn)品基差
- []環(huán)球觀天下!國(guó)銳地產(chǎn):2022年虧損約3.2億港元
- 解析ElasticSearch ElasticSearch字段類型解析
- 【熱聞】博彩股集體走強(qiáng) 澳門3月博彩毛收入127.38億澳門元
- 【世界時(shí)快訊】港股內(nèi)房股多數(shù)上漲 裕田中國(guó)漲超8%、中海漲超7%
- 當(dāng)前滾動(dòng):浙江余姚工業(yè)園區(qū)建設(shè)公司4億中票回售 并調(diào)整利率至3.50%
- 環(huán)球視點(diǎn)!天山鋁業(yè):截止3月31日公司股東人數(shù)71783人
- 陽(yáng)澄湖濱酒店和新江南8.51億元商業(yè)ABS更新至“已受理”
- 【全球新要聞】博主探店變“探錢”,消費(fèi)者避雷變“踩雷”
- 焦點(diǎn)熱文:4月3日限售股解禁一覽(名單)
- 環(huán)球今亮點(diǎn)!周口城投10億元私募債項(xiàng)目更新至“已受理”
- 世界快播:金能科技:截至2023年3月31日,公司股東戶數(shù)共42007戶
- B站注冊(cè)資本增幅400%至5億 目前由陳睿全資持股
- 光源資本出任獨(dú)家財(cái)務(wù)顧問(wèn) 沐曦集成電路10億元A輪融資宣告完成
- 巨輪智能2021年上半年?duì)I收11.24億元 期內(nèi)研發(fā)費(fèi)用投入增長(zhǎng)19.05%
- 紅棗期貨尾盤拉升大漲近6% 目前紅棗市場(chǎng)總庫(kù)存約30萬(wàn)噸
- 嘉銀金科發(fā)布2021年Q2財(cái)報(bào) 期內(nèi)凈利潤(rùn)達(dá)1.27億元同比增長(zhǎng)208%
- 成都銀行2021上半年凈利33.89億元 期內(nèi)實(shí)現(xiàn)營(yíng)收同比增長(zhǎng)17.27億元
- 汽車之家發(fā)布2021年第二季度業(yè)績(jī) 期內(nèi)新能源汽車品牌收入增長(zhǎng)238%
- 中信銀行上半年實(shí)現(xiàn)凈利潤(rùn)290.31億元 期末不良貸款余額706.82億元
- 光伏概念掀起漲停潮交易價(jià)格創(chuàng)新高 全天成交額達(dá)1.29億元
- 上半年生物藥大增45% 關(guān)鍵財(cái)務(wù)指標(biāo)好轉(zhuǎn)營(yíng)收賬款持續(xù)下降
- 新資訊:宋都服務(wù):2022年實(shí)現(xiàn)收入2.68億元
- 環(huán)球今亮點(diǎn)!榮萬(wàn)家:2022年歸屬股東凈利潤(rùn)2.35億元
- 遠(yuǎn)洋服務(wù):2022年歸屬股東凈利潤(rùn)人民幣7540萬(wàn)元
- 雅化集團(tuán):業(yè)績(jī)預(yù)告的發(fā)布有相應(yīng)的規(guī)則和時(shí)間要求,具體信息您可上網(wǎng)查詢和了解
- 今日訊!ST步森股民索賠時(shí)效不足4個(gè)月 此前已有獲賠案例
- 世界快消息!買房賣房大消息!"帶押過(guò)戶"全國(guó)全面推進(jìn)!北京正式啟動(dòng),100多地市已開(kāi)展
- 維金加德推出了與熱門電視劇維京人合作的第二部分
- 【天天新視野】從可用座位公里,看航空市場(chǎng)過(guò)去25年的變化
- 環(huán)球焦點(diǎn)!超級(jí)IP青貓出道,東呈互聯(lián)網(wǎng)化又下一棋
- 焦點(diǎn)熱門:旅行社入境團(tuán)隊(duì)游今起恢復(fù),入境航班搜索熱度增長(zhǎng)370%
- 環(huán)球聚焦:香港旅游業(yè)復(fù)蘇推動(dòng)航空運(yùn)力增長(zhǎng),但全面恢復(fù)并不容易
- 當(dāng)前滾動(dòng):世茂集團(tuán):2022年全年業(yè)績(jī)及2022年年報(bào)延遲刊發(fā)及寄發(fā)
- 全球關(guān)注:上坤地產(chǎn):延遲刊發(fā)2022年經(jīng)審核末期業(yè)績(jī)
- 財(cái)報(bào)金選|楊惠妍:在分化市場(chǎng)中尋找確定性
- 羅牛山:各行各業(yè)的采購(gòu)方會(huì)對(duì)投標(biāo)企業(yè)設(shè)立不同情況的資格門檻,要求投標(biāo)單位具備各種其所需的條件
- 每日關(guān)注!云南能投:截至目前公司未收到任何大股東有關(guān)減持的通知
- 天天最新:財(cái)報(bào)金選丨領(lǐng)地控股2022年收益達(dá)139.79億元 毛損19.996億元
- 世界要聞:財(cái)報(bào)金選丨弘陽(yáng)地產(chǎn)2022年總收入200.13億元 錄得毛利16.66億元
- 全球焦點(diǎn)!國(guó)林科技:公司新疆晶體乙醛酸項(xiàng)目采用釜式反應(yīng)裝置
- 天天即時(shí)看!華蘭疫苗:2022年度公司流感疫苗產(chǎn)品的整體毛利率為88.49% 占營(yíng)業(yè)收入的比重為99.56%
- 勇闖元宇宙,這家動(dòng)漫公司破勢(shì)生長(zhǎng)
- 讓元宇宙更好玩,詠聲動(dòng)漫是認(rèn)真的!
- 讓元宇宙更好玩,詠聲動(dòng)漫是認(rèn)真的!
- 煤礦截?cái)嘧o(hù)林水,六旬老漢跪地引關(guān)注,誰(shuí)的鍋?
- 環(huán)球看熱訊:浙江溫州:鼓勵(lì)新增的海上風(fēng)電、集中式光伏電站建設(shè)或購(gòu)買新型儲(chǔ)能(服務(wù))
- 快速大爆發(fā)的逆變器龍頭,德業(yè)股份在光儲(chǔ)行業(yè)的逆襲
- 當(dāng)前關(guān)注:580億!海辰儲(chǔ)能獲工商銀行授信!
- 石油行業(yè)的春天來(lái)了?
- 環(huán)球看熱訊:中交地產(chǎn):擬發(fā)行7億元公司債券
- 焦點(diǎn)消息!榮聯(lián)科技:公司和英偉達(dá)目前沒(méi)有業(yè)務(wù)合作
- 焦點(diǎn)關(guān)注:建發(fā)房地產(chǎn):擬發(fā)行10億元公司債券
- 【全球新要聞】財(cái)報(bào)金選丨紅星美凱龍:市場(chǎng)份額持續(xù)增長(zhǎng) 龍頭地位穩(wěn)固
- 世界熱門:萬(wàn)達(dá)商管35億元ABS發(fā)行計(jì)劃獲上交所受理
- 南國(guó)置業(yè):公司于2023年情人節(jié)期間,在“泛悅甄選”的微信小程序上推出茶葉與紅酒
- 全球微速訊:海昌海洋公園:2022年凈虧損14.08億元
- 中富通:公司按照相關(guān)要求在定期報(bào)告中披露股東人數(shù)
- 環(huán)球熱消息:常州養(yǎng)老金交15和交20年有多少差別?(常州的養(yǎng)老保險(xiǎn)要交多少)
- “五一”海南掀旅游熱:三亞6000元酒店一房難求,機(jī)票大漲游客直呼比國(guó)外還貴
- 環(huán)球即時(shí):富力地產(chǎn):預(yù)計(jì)2022年凈虧損155億元
- 綠城置業(yè)10.82億元競(jìng)得大連東港一宗超3.3萬(wàn)平米涉宅地塊
- 七座商務(wù)車有哪些?七座商務(wù)車怎么樣?
- 3月31日西部材料漲停分析:有色 · 鉬,有色 · 鈦,有色 · 鋯概念熱股
- 全球即時(shí):“五個(gè)一百”,奮進(jìn)中國(guó)迸發(fā)澎湃活力
- 全球熱文:氯堿化工:公司出口貿(mào)易在一季度沒(méi)有重大變化
- 3月31日三江購(gòu)物漲停分析:阿里巴巴概念股,新零售概念熱股
- 3月31日倍加潔漲停分析:口腔概念熱股
- 財(cái)報(bào)金選丨遠(yuǎn)洋集團(tuán)2022年?duì)I業(yè)額461.27億元 毛利23.77億元
- 【天天時(shí)快訊】陸豐烏坎在哪里?陸豐烏坎資料介紹?
- 防腐油漆有什么優(yōu)點(diǎn)?防腐油漆資料介紹?
- 中海地產(chǎn):2022年歸屬股東凈利潤(rùn)232.6億元
- N型組件“四高四低”優(yōu)勢(shì)得到驗(yàn)證,國(guó)電電力天津30MW項(xiàng)目發(fā)電增益5.15%
- 3月31日健麾信息漲停分析:醫(yī)療信息化概念熱股
- 焦點(diǎn)滾動(dòng):vivoy55是全網(wǎng)通手機(jī)嗎?vivoy55配置怎么樣?
- 視點(diǎn)!新聞系專業(yè)有哪些?與新聞相關(guān)的課程有哪些?
- 修改器怎么使用?修改器的使用方法?
- 資訊:深圳首批供地:龍湖6.08億競(jìng)得龍崗宅地 深振業(yè)10.29億元摘下光明區(qū)用地
- 今亮點(diǎn)!集美大學(xué)航海學(xué)院是本科嗎?集美大學(xué)航海學(xué)院資料介紹?
- 樂(lè)寶是什么?樂(lè)寶商城APP資料介紹?
- 當(dāng)前聚焦:盡的多音詞怎么組詞?盡有幾種讀音?
- 【時(shí)快訊】如何設(shè)置網(wǎng)頁(yè)視頻播放器?設(shè)置網(wǎng)頁(yè)視頻播放器的方法?
- 召喚武俠人物的系統(tǒng)小說(shuō)有哪些?召喚武俠人物的系統(tǒng)小說(shuō)大全?
- 天天快訊:楊天真是誰(shuí)?楊天真?zhèn)€人資料介紹?
- 每日快看:發(fā)酵床的材料都有什么?發(fā)酵床是干什么的?
- 2020年高速公路收費(fèi)標(biāo)準(zhǔn)是什么?2020年高速公路收費(fèi)標(biāo)準(zhǔn)介紹?
- 你的酒館對(duì)我打了烊是什么歌?創(chuàng)作背景是什么?
- 天天新資訊:管理學(xué)中管理的協(xié)調(diào)性定義是什么?協(xié)調(diào)的概念是什么?
- 新年紅包祝福語(yǔ)怎么寫?新年紅包祝福語(yǔ)有哪些?
- 今日熱搜:4月市場(chǎng)以結(jié)構(gòu)性機(jī)會(huì)為主?六大券商看市:把握三大主線
- 熱訊:華為榮耀5c怎么樣?華為榮耀5c有哪些優(yōu)缺點(diǎn)?
- 世界熱門:單色儀光譜儀以及攝譜儀有什么區(qū)別?單色儀光譜儀以及攝譜儀的區(qū)別介紹?
- 環(huán)球觀熱點(diǎn):《最后的生還者》PC版新更新補(bǔ)丁推出 修復(fù)Bug優(yōu)化性能
- 6000元做期貨一年賺一百萬(wàn),用6000元入市期貨,一年千萬(wàn)賺不難
- 世界聚焦:其季父項(xiàng)梁中的季是什么意思?古代兄弟排行稱謂有哪些?
- 正規(guī)投資app平臺(tái),正規(guī)投資app平臺(tái)推薦
- 今日熱訊:股票交易平臺(tái)是什么意思,股票交易規(guī)則
- 世界新資訊:2萬(wàn)元股票一進(jìn)一出手續(xù)費(fèi),2萬(wàn)元股票交易真實(shí)成本,了解一下手續(xù)費(fèi)影響投資的重要性
- 速讀:投資理財(cái)平臺(tái)哪個(gè)最好,最優(yōu)投資理財(cái)平臺(tái)評(píng)選
- 【天天新要聞】現(xiàn)場(chǎng)丨譚迎輝:城市動(dòng)能升級(jí)要抓住產(chǎn)業(yè)本身和一流人才兩條動(dòng)線
- 熱門:現(xiàn)場(chǎng)丨陳靂:新老基建、高端制造業(yè)、數(shù)字經(jīng)濟(jì)將成為托底中國(guó)發(fā)展的三大引擎
- 全球熱點(diǎn)評(píng)!蘇博特:截至2023年3月20日,蘇博特公司股東總數(shù)為17219戶
- 【全球報(bào)資訊】華潤(rùn)置地80億元消費(fèi)基礎(chǔ)設(shè)施資產(chǎn)支持ABS已獲受理
- 【新視野】財(cái)報(bào)金選丨中海發(fā)展:2022年?duì)I收1803.2億元,于內(nèi)地新增40幅土地
- 今日快看!北京銀保監(jiān)局等聯(lián)合發(fā)文,啟動(dòng)存量住房交易“帶押過(guò)戶”模式
- 年報(bào)顯示業(yè)績(jī)不及預(yù)期 新強(qiáng)聯(lián)股價(jià)下跌超8%
- 田文富:大力傳承弘揚(yáng)新時(shí)代竹林精神,推動(dòng)河南創(chuàng)新開(kāi)放“建高地”
- 銀行股票分紅時(shí)間
- 【世界快播報(bào)】總資產(chǎn)周轉(zhuǎn)率多少正常
- 世界消息!審計(jì)的目標(biāo)是什么
- 世界今頭條!借款合同印花稅稅率是多少
- 天天簡(jiǎn)訊:什么是剛性兌付
- 現(xiàn)場(chǎng)丨圓桌對(duì)話:創(chuàng)新聚變,城市更新的道與術(shù)
- 現(xiàn)貨黃金交易策略:美元守住關(guān)鍵支撐,金價(jià)無(wú)力繼續(xù)沖高?
- 全球通訊!萬(wàn)科祝九勝:泊寓實(shí)現(xiàn)報(bào)表盈利的目標(biāo)不會(huì)改變
- 北方稀土:稀土產(chǎn)品的市場(chǎng)價(jià)格是由供求關(guān)系決定的
- 世界快看點(diǎn)丨匯川技術(shù):公司會(huì)在本欄目“公司聲音”處披露股東人數(shù),您可以自行關(guān)注
- 【全球熱聞】溫德姆酒店及度假村2022年?duì)I收14.98億美元 歸母凈利潤(rùn)3.55億美元
- 【世界時(shí)快訊】林洋能源:公司自持的光伏電站按規(guī)定辦理相關(guān)手續(xù)進(jìn)行建設(shè)
- 股市交易時(shí)間內(nèi)可以隨時(shí)買入和賣出嗎
- 全球觀天下!奈雪的茶在南昌成立餐飲管理公司
- 葛蘭隱形重倉(cāng)股曝光!大幅加倉(cāng)這些股