es的常用字段類型和查詢


es的常用字段類型和查詢

    概要

    在ES中,字段的類型很關鍵,畢竟無論是es還是傳統的數據庫,都無法弱化字段的類型。

    在索引的時候,如果字段第一次出現,會自動識別某個類型。

    那么如果一個字段已經存在了,並且設置為某個類型。再來一條數據,字段的數據不與當前的類型相符,就會出現字段沖突的問題。如果發生了沖突,在2.x版本會自動拒絕。

    如果自動映射無法滿足需求,就需要使用者自己來設置映射類型,因此,就需要使用者了解ES中的類型。

    一、ES數據類型

    1、分隔數據

    ElasticSearch“真正用於分隔數據的結構“只有index,而沒有type,type實際上作為了一個元數據(類似SQL中的id,作為額外的標識數據)來實現邏輯划分。

    2、mapping

    在index中還有一個mapping,mapping管理了整個index的各個字段的屬性,也就是定義了整個index中document的結構。

    GET test_alias/_mapping

    3、ES數據類型

    ES常用的數據類型可分為3大類:核⼼數據類型、復雜數據類型、專⽤數據類型

    1)核心數據類型

  (1)字符串類型: text, keyword

    text類型:

    a. 支持分詞,全文檢索,支持模糊、精確查詢,不支持聚合,排序操作;
    b. test類型最大支持的字符長度無限制,適合大字段存儲;
    使用場景:
    存儲全文搜索數據, 例如: 郵箱內容、地址、代碼塊、博客文章內容等。
    默認結合standard analyzer(標准解析器)對文本進行分詞、倒排索引。
    默認結合標准分析器進行詞命中、詞頻相關度打分。

    keyword類型:

    a.  不進行分詞,直接索引,支持模糊、支持精確匹配,支持聚合、排序操作。
    b.  keyword類型的最大支持的長度為——32766個UTF-8類型的字符,可以通過設置ignore_above指定自持字符長度,超過給定長度后的數據將不被索引,無法通過term精確匹配檢索返回結果。

    使用場景:
    存儲郵箱號碼、url、name、title,手機號碼、主機名、狀態碼、郵政編碼、標簽、年齡、性別等數據。
    用於篩選數據(例如: select * from x where status='open')、排序、聚合(統計)。
    直接將完整的文本保存到倒排索引中。

  (2)數字類型:long, integer, short, byte, double, float, half_float, scaled_float

  (3)日期:date

  (4)日期 納秒:date_nanos

  (5)布爾型:boolean

  (6)Binary:binary

  (7)Range: integer_range, float_range, long_range, double_range, date_range

    二、es的常用命令

   1、 cat 命令:

   cat 命令是監控 es 的節點,內存,索引,分片,集群狀態等一些基本信息

 1 # 列出所有_cat命令
 2 GET _cat/
 3 
 4 # 顯示左右索引並按照存儲大小排序
 5 GET _cat/indices?v&s=store.size:desc
 6 
 7 # 獲取集群狀態
 8 GET _cat/health
 9 
10 # 當使用v參數是 會顯示列名的詳細信息
11 GET _cat/health?v
12 
13 # 顯示所有的node信息
14 GET _cat/nodes?v
15 
16 # 只顯示ip和load_5m這兩列
17 GET _cat/nodes?v&h=ip,load_5m
18 
19 # 通過json格式顯示輸出
20 GET _cat/indices?v&format=json&pretty

   2、 精確值查找

   term

 1 GET test_alias/_search
 2 {
 3   "query": {
 4     "term": {
 5       "target_id": {
 6         "value": "15464324"
 7       }
 8     }
 9   }
10 }

   3、范圍檢索

    range

    范圍查詢的符號:

    gte  大於或等於

    gt  大於

    lte 小於或等於

    lt   小於

    例如:數組范圍內的查詢

 1 GET book_shop/_search
 2 {
 3     "query": {
 4         "range": {
 5             "price": {
 6                 "gte": 40,
 7                 "lte": 80,
 8                 "boost": 2.0    // 設置得分的權重值(提升值), 默認是1.0
 9             }
10         }
11     }
12 }

 

 1 GET test_alias/_search
 2 {
 3   "query": {
 4     "bool": {
 5       "filter": [
 6         {
 7           "terms": {
 8             "expend_type": [
 9               1,
10               13
11             ]
12           }
13         },
14         {
15           "term": {
16             "target_id": 2402483
17           }
18         },
19         {
20           "range": {
21             "time": {
22               "gt": 1553217005,
23               "lt": 1553218095
24             }
25           }
26         }
27       ]
28     }
29   }
30 }

   4、分詞檢索

    match

    match_all

    4) Bool查詢

    Bool查詢包括四種子句:must、filter、should、must_not

    must, 返回的文檔必須滿足must子句的條件,並且參與計算分值

    filter, 返回的文檔必須滿足filter子句的條件。但是跟must不一樣的是,不會計算分值, 並且可以使用緩存

    從上面的描述來看,如果只看查詢的結果,must和filter是一樣的。區別是場景不一樣。如果結果需要算分就使用must,否則可以考慮使用filter

    5、聚合查詢

    aggs

    1) 給定target_id的值,查詢同一個target_id下的expend_type為1或者13下的統計值

 1 GET test_alias/_search
 2 {
 3   "size": 0,
 4   "query": {
 5     "bool": {
 6       "must": [
 7         {
 8           "terms": {
 9             "expend_type": [
10               1,
11               13
12             ]
13           }
14         },
15         {
16           "terms": {
17             "target_id": [
18               13906061,
19               13817056,
20               13904373,
21               13851977,
22               13851353
23             ]
24           }
25         }
26       ]
27     }
28   },
29   "aggs": {
30     "phone_count": {
31       "terms": {
32         "field": "target_id"
33       }
34     }
35   }
36 }

   查詢結果為:

     

    2)  給定target_id的值,查詢expend_type分別為1和13下的統計值

 1 GET test_alias/_search
 2 {
 3   "size": 0,
 4   "query": {
 5     "bool": {
 6       "must": [
 7         {
 8           "terms": {
 9             "target_id": [
10               13906061,
11               13817056,
12               13904373
13             ]
14           }
15         },
16         {
17           "terms": {
18             "expend_type": [
19               1,
20               13
21             ]
22           }
23         }
24       ]
25     }
26   },
27   "aggs": {
28     "target": {
29       "terms": {
30         "field": "target_id"
31       },
32       "aggs": {
33         "type": {
34           "terms": {
35             "field": "expend_type"
36           }
37         }
38       }
39     }
40   }
41 }

   查詢結果為:

 1 {
 2   "took" : 2,
 3   "timed_out" : false,
 4   "_shards" : {
 5     "total" : 9,
 6     "successful" : 9,
 7     "skipped" : 0,
 8     "failed" : 0
 9   },
10   "hits" : {
11     "total" : {
12       "value" : 620,
13       "relation" : "eq"
14     },
15     "max_score" : null,
16     "hits" : [ ]
17   },
18   "aggregations" : {
19     "target" : {
20       "doc_count_error_upper_bound" : 0,
21       "sum_other_doc_count" : 0,
22       "buckets" : [
23         {
24           "key" : 13906061,
25           "doc_count" : 502,
26           "type" : {
27             "doc_count_error_upper_bound" : 0,
28             "sum_other_doc_count" : 0,
29             "buckets" : [
30               {
31                 "key" : 1,
32                 "doc_count" : 502
33               }
34             ]
35           }
36         },
37         {
38           "key" : 13817056,
39           "doc_count" : 62,
40           "type" : {
41             "doc_count_error_upper_bound" : 0,
42             "sum_other_doc_count" : 0,
43             "buckets" : [
44               {
45                 "key" : 1,
46                 "doc_count" : 62
47               }
48             ]
49           }
50         },
51         {
52           "key" : 13904373,
53           "doc_count" : 56,
54           "type" : {
55             "doc_count_error_upper_bound" : 0,
56             "sum_other_doc_count" : 0,
57             "buckets" : [
58               {
59                 "key" : 1,
60                 "doc_count" : 56
61               }
62             ]
63           }
64         }
65       ]
66     }
67   }
68 }

 

 參考鏈接: https://cloud.tencent.com/developer/article/1496106


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM