<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                演示使用的數據: ```json #創建student索引 PUT /student #添加下面數據用于演示 POST /student/_doc/1001 { "name": "zhangsan", "nickname": "zhangsan", "sex": "男", "age": 30 } POST /student/_doc/1002 { "name": "lisi", "nickname": "lisi", "sex": "男", "age": 20 } POST /student/_doc/1003 { "name": "wangwu", "nickname": "wangwu", "sex": "女", "age": 40 } POST /student/_doc/1004 { "name": "zhangsan01", "nickname": "zhangsan01", "sex": "女", "age": 50 } POST /student/_doc/1005 { "name": "zhangsan02", "nickname": "zhangsan02", "sex": "女", "age": 30 } ``` **1. 查詢一個索引的所有文檔** ```json #寫法1 GET /student/_search #寫法2 GET /student/_search { "query": { "match_all": {} } } ``` 結果如下: ```json { "took" : 0, #查詢花銷的時間 "timed_out" : false, #是否超時,false-不超時 "_shards" : { #分片信息 "total" : 1, #分片總數 "successful" : 1, #分片成功次數 "skipped" : 0, #分片被忽略次數 "failed" : 0 #分片失敗次數 }, "hits" : { #搜索命中結果 "total" : { #搜索條件匹配文檔總數 "value" : 5, #條件命中條數 "relation" : "eq" #計數規則,eq-計數準確、gte-計數不準確 }, "max_score" : 1.0, #匹配度分值 "hits" : [ #命中結果集合 { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.0, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 } }, { "_index" : "student", "_type" : "_doc", "_id" : "1002", "_score" : 1.0, "_source" : { "name" : "lisi", "nickname" : "lisi", "sex" : "男", "age" : 20 } }, { "_index" : "student", "_type" : "_doc", "_id" : "1003", "_score" : 1.0, "_source" : { "name" : "wangwu", "nickname" : "wangwu", "sex" : "女", "age" : 40 } }, { "_index" : "student", "_type" : "_doc", "_id" : "1004", "_score" : 1.0, "_source" : { "name" : "zhangsan01", "nickname" : "zhangsan01", "sex" : "女", "age" : 50 } }, { "_index" : "student", "_type" : "_doc", "_id" : "1005", "_score" : 1.0, "_source" : { "name" : "zhangsan02", "nickname" : "zhangsan02", "sex" : "女", "age" : 30 } } ] } } ``` **2. 匹配查詢** `match` 匹配類型查詢,會把查詢條件進行分詞,然后進行查詢,多個詞條之間是 or 的關系。 ```json #寫法1 GET /student/_search?q=name:zhangsan #寫法2 GET /student/_search { "query": { "match": { "name": "zhangsan" } } } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.3862942, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.3862942, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 } } ] } } ``` **3. 字段匹配查詢** `multi_match` 與 `match` 類似,不同的是它可以在多個字段中查詢,多個字段是 OR 關系。 ```json GET /student/_search { "query": { "multi_match": { "query": "zhangsan", "fields": ["name", "nickname"] #name=zhangsan 或者 nickname=zhangsan } } } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.540445, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.540445, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 } } ] } } ``` **4. 關鍵字精準查詢** `term` 查詢,精確的關鍵詞匹配查詢,不對查詢條件進行分詞。 ```json GET /student/_search { "query": { "term": { "name": { "value": "zhangsan" } } } } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.3862942, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.3862942, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 } } ] } } ``` **5. 多關鍵字精確查詢** `terms` 查詢和 `term` 查詢一樣,但它允許你指定多值進行匹配。 ```json GET /student/_search { "query": { "terms": { "name": ["zhangsan", "lisi"] #name=zhangsan 或者name=lisi } } } ``` 解決如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.0, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 } }, { "_index" : "student", "_type" : "_doc", "_id" : "1002", "_score" : 1.0, "_source" : { "name" : "lisi", "nickname" : "lisi", "sex" : "男", "age" : 20 } } ] } } ``` **6. 只查詢指定字段** 默認情況下,Elasticsearch 在搜索的結果中,會把文檔中保存在`_source` 的所有字段都返回。 如果我們只想獲取其中的部分字段,我們可以添加`_source` 的過濾。 ```json #寫法1 GET /student/_search?q=nickname:zhangsan&_source=name,nickname #寫法2 GET /student/_search { "_source": ["name", "nickname"], #只查詢name和nickname字段 "query": { "terms": { "nickname": ["zhangsan"] #條件是nickname=zhangsan } } } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.3862942, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.3862942, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan" } } ] } } ``` **7. 過濾字段** `includes`:來指定想要顯示的字段。 `excludes`:來指定不想要顯示的字段。 (1)只查詢`includes`指定的字段。 ```json GET /student/_search { "_source": { "includes": ["name", "nickname"] #只查詢name、nickname字段 }, "query": { "terms": { "nickname": ["zhangsan", "lisi"] #條件是nickname=zhangsan 或者niciname=lisi } } } ``` 結果如下: ```json { "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.0, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan" } }, { "_index" : "student", "_type" : "_doc", "_id" : "1002", "_score" : 1.0, "_source" : { "name" : "lisi", "nickname" : "lisi" } } ] } } ``` (2)除了`excludes`指定的字段不查詢,其他字段都查詢。 ```json GET /student/_search { "_source": { "excludes": ["name", "nickname"] #不查詢name、nickname字段 }, "query": { "terms": { "nickname": ["zhangsan", "lisi"] #條件是nickname=zhangsan 或者nickname=lisi } } } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.0, "_source" : { "sex" : "男", "age" : 30 } }, { "_index" : "student", "_type" : "_doc", "_id" : "1002", "_score" : 1.0, "_source" : { "sex" : "男", "age" : 20 } } ] } } ``` **8. 組合查詢** `bool`把各種其它查詢通過`must`(必須 )、`must_not`(必須不)、`should`(應該)的方式進行組合。 ```json GET /student/_search { "query": { "bool": { "must": [ { "match": { "name": "zhangsan" } } ], "must_not": [ { "match": { "age": 40 } } ], "should": [ { "match": { "sex": "男" } } ] } } } ``` 結果如下: ```json { "took" : 2, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 2.261763, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 2.261763, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 } } ] } } ``` **9. 范圍查詢** `range` 查詢找出那些落在指定區間內的數字或者時間。`range` 查詢允許以下字符。 ``` gt 大于(>) gte 大于等于(>=) lt 小于(<) lte 小于等于(<=) ``` ```json #查詢age在[30, 35]區間的文檔 GET /student/_search?q=age[30 TO 35] #查詢age>=30的文檔 GET /student/_search?q=age:>=40 #查詢age在[30, 35]區間的文檔 GET /student/_search { "query": { "range": { "age": { "gte": 30, "lte": 35 } } } } ``` 查詢age在[30, 35]區間結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.0, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 } }, { "_index" : "student", "_type" : "_doc", "_id" : "1005", "_score" : 1.0, "_source" : { "name" : "zhangsan02", "nickname" : "zhangsan02", "sex" : "女", "age" : 30 } } ] } } ``` **10. 模糊查詢** 返回包含與搜索字詞相似的字詞的文檔。 編輯距離是將一個術語轉換為另一個術語所需的一個字符更改的次數。這些更改可以包括: * 更改字符(box → fox) * 刪除字符(black → lack) * 插入字符(sic → sick) * 轉置兩個相鄰字符(act → cat) 為了找到相似的術語,`fuzzy` 查詢會在指定的編輯距離內創建一組搜索詞的所有可能的變體或擴展。然后查詢返回每個擴展的完全匹配。 通過 `fuzziness` 修改編輯距離。一般使用默認值 AUTO,根據術語的長度生成編輯距離。 ```json GET /student/_search { "query": { "fuzzy": { "name": { "value": "zhangsan" } } } } GET /student/_search { "query": { "fuzzy": { "name": { "value": "zhangsan" , "fuzziness": 1 } } } } ``` 結果如下 : ```json #########不指定編輯距離fuzziness的結果######### { "took" : 3, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 3, "relation" : "eq" }, "max_score" : 1.3862942, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.3862942, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 } }, { "_index" : "student", "_type" : "_doc", "_id" : "1004", "_score" : 1.0397208, "_source" : { "name" : "zhangsan01", "nickname" : "zhangsan01", "sex" : "女", "age" : 50 } }, { "_index" : "student", "_type" : "_doc", "_id" : "1005", "_score" : 1.0397208, "_source" : { "name" : "zhangsan02", "nickname" : "zhangsan02", "sex" : "女", "age" : 30 } } ] } } #########指定編輯距離fuzziness為1的結果######### { "took" : 3, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.3862942, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.3862942, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 } } ] } } ``` **11. 字段排序** ```json #先根據age降序排序,再根據_score字段降序排序 GET /student/_search { "query": { "match_all": {} }, "sort": [ { "age": { "order": "desc" #desc是降序,asc是升序 } }, { "_score": { "order": "desc" } } ] } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : null, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1004", "_score" : 1.0, "_source" : { "name" : "zhangsan01", "nickname" : "zhangsan01", "sex" : "女", "age" : 50 }, "sort" : [ 50, 1.0 ] }, { "_index" : "student", "_type" : "_doc", "_id" : "1003", "_score" : 1.0, "_source" : { "name" : "wangwu", "nickname" : "wangwu", "sex" : "女", "age" : 40 }, "sort" : [ 40, 1.0 ] }, { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.0, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 }, "sort" : [ 30, 1.0 ] }, { "_index" : "student", "_type" : "_doc", "_id" : "1005", "_score" : 1.0, "_source" : { "name" : "zhangsan02", "nickname" : "zhangsan02", "sex" : "女", "age" : 30 }, "sort" : [ 30, 1.0 ] }, { "_index" : "student", "_type" : "_doc", "_id" : "1002", "_score" : 1.0, "_source" : { "name" : "lisi", "nickname" : "lisi", "sex" : "男", "age" : 20 }, "sort" : [ 20, 1.0 ] } ] } } ``` **12. 高亮查詢** 高亮查詢由`highlight`屬性提供,它由下面幾個標簽組合完成高亮查詢。 ``` pre_tags:前置標簽 post_tags:后置標簽 fields:需要高亮的字段 title:這里聲明 title 字段需要高亮,后面可以為這個字段設置特有配置,也可以空 ``` ```json GET /student/_search { "query": { "match": { "name": "zhangsan" #在這里指定name,則只有name字段可以高亮顯示 } }, "highlight": { "pre_tags": "<font color='red'>", "post_tags": "</font>", "fields": { "name": {} } } } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.3862942, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1001", "_score" : 1.3862942, "_source" : { "name" : "zhangsan", "nickname" : "zhangsan", "sex" : "男", "age" : 30 }, "highlight" : { "name" : [ "<font color='red'>zhangsan</font>" ] } } ] } } ``` 返回json數據看不出高亮效果,我用Postman查詢結果如下: ![](https://img.kancloud.cn/88/39/8839c823073c18d8470bcc47fe616524_1410x216.png) **13. 分頁查詢** `from`:當前頁的起始索引,默認從 0 開始。 `$ from = (pageNum - 1) * size $`,pageNum為當前第幾頁。 `size`:每頁顯示多少條。 ```json GET /student/_search { "query": { "match_all": {} }, "sort": [ { "age": { "order": "desc" } } ], "from": 0, "size": 2 } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : null, "hits" : [ { "_index" : "student", "_type" : "_doc", "_id" : "1004", "_score" : null, "_source" : { "name" : "zhangsan01", "nickname" : "zhangsan01", "sex" : "女", "age" : 50 }, "sort" : [ 50 ] }, { "_index" : "student", "_type" : "_doc", "_id" : "1003", "_score" : null, "_source" : { "name" : "wangwu", "nickname" : "wangwu", "sex" : "女", "age" : 40 }, "sort" : [ 40 ] } ] } } ``` **14. 聚合查詢** 聚合允許使用者對 es 文檔進行統計分析,類似與關系型數據庫中的 group by,當然還有很 多其他的聚合,例如取最大值、平均值等等。 (1)求最大值、最小值等。 ```json GET /student/_search { "aggs": { "max_age": { #max_age是別名,自由定義即可 "max": { #對age字段求最大值 "field": "age" } } }, "size": 0 } GET /student/_search { "aggs": { "min_age": { "min": {"field": "age"} #對age字段求最小值 } }, "size": 0 } GET /student/_search { "aggs": { "sum_age": { "sum": {"field": "age"} #對age字段求和 } }, "size": 0 } GET /student/_search { "aggs": { "avg_age": { "avg": {"field": "age"} #對age字段求平均值 } }, "size": 0 } GET /student/_search { "aggs": { "distinct_age": { "cardinality": {"field": "age"} #對age字段的值進行去重之后再取總數 } }, "size": 0 } ``` 結果我這里就不寫出來了。 (2)`state`聚合。對某個字段一次性返回 count,max,min,avg 和 sum 五個指標 ```json GET /student/_search { "aggs": { "stats_age": { "stats": {"field": "age"} } }, "size": 0 } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "stats_age" : { "count" : 5, "min" : 20.0, "max" : 50.0, "avg" : 34.0, "sum" : 170.0 } } } ``` **15. 桶聚合查詢** 桶聚和相當于 sql 中的 group by 語句。 (1)分組。 ```json GET /student/_search { "aggs": { "age_groupby": { "terms": {"field": "age"} } }, "size": 0 } ``` 結果如下: ```json { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "age_groupby" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : 30, "doc_count" : 2 #30歲這一組的人數有兩個 }, { "key" : 20, "doc_count" : 1 }, { "key" : 40, "doc_count" : 1 }, { "key" : 50, "doc_count" : 1 } ] } } } ``` (2)分組聚合。 ```json #先分組,再對每一個組求和 GET /student/_search { "aggs": { "age_groupby": { "terms": {"field": "age"}, "aggs": { "sum_age": { "sum": {"field": "age"} } } } }, "size": 0 } ``` 結果如下: ```json { "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "age_groupby" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : 30, "doc_count" : 2, "sum_age" : { "value" : 60.0 #30歲這一組的求和結果為60 } }, { "key" : 20, "doc_count" : 1, "sum_age" : { "value" : 20.0 } }, { "key" : 40, "doc_count" : 1, "sum_age" : { "value" : 40.0 } }, { "key" : 50, "doc_count" : 1, "sum_age" : { "value" : 50.0 } } ] } } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看