中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Elasticsearch聚合查詢及排序的方法

發布時間:2022-04-19 15:15:11 來源:億速云 閱讀:233 作者:iii 欄目:開發技術

這篇“Elasticsearch聚合查詢及排序的方法”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Elasticsearch聚合查詢及排序的方法”文章吧。

1 es排序

# 1 排序
GET jeff/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
   "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}
# 升序
GET jeff/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
   "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}
# 并不是所有類型都支持排序(只允許數字類型做排序)
GET jeff/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
   "sort": [
    {
      "name": {
        "order": "asc"
      }
    }
  ]
}

2 match和match的區別

# match和match_all的區別?
mach表示要查詢,根據字段查,match_all查所有
GET jeff/doc/_search
{
  "query": {
    "match_all": {}
  }
}

3 分頁查詢

GET jeff/doc/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ], 
  "from": 2,
  "size": 1
}
#   "from": 2,代表從第二條開始, 取一條"size": 1
# 有了這個查詢,如何分頁?
一頁有10條數據
第一頁:
  "from": 0,
  "size": 10
第二頁:
  "from": 10,
  "size": 10
第三頁:
  "from": 20,
  "size": 10

4 es 組合查詢

# 多個條件,and ,or ,not
# 對到es中就是布爾查詢,must,should,must_not,filter
must  ---  and 
should --- or
must_not --- not
filter --- 過濾
# 1 組合查詢之must
# 查詢form gu和age=30的數據
GET gyy/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "age": "30"
          }
        }
      ]
    }
  }
}
# 查詢form gu數據()
GET gyy/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        }
      ]
    }
  }
}
# 同上
GET gyy/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  }
}
# 2 組合查詢之should,或者的條件
GET gyy/doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "閉月"
          }
        }
      ]
    }
  }
}
# 3 組合查詢之must_not  取反
GET gyy/doc/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "可愛"
          }
        },
        {
          "match": {
            "age": 18
          }
        }
      ]
    }
  }
}
# `filter`條件過濾查詢,過濾條件的范圍用`range`表示,`gt`表示大于,大于多少呢
# gt:大于   lt:小于  get:大于等于   let:小于等于
GET gyy/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gt": 25
          }
        }
      }
    }
  }
}
# 查詢年齡小于等于18的所有數據
GET gyy/doc/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "age": {
            "lte": 18
          }
        }
      }
    }
  }
}

5 結果過濾展示字端

# 對結果進行過濾,類似于如下
select * from user;
select name,age from user;
# 對應到es的查詢
GET gyy/doc/_search
{
  "query": {
    "match": {
      "name": "顧老二"
    }
  },
  "_source": ["name", "age"]
}

6 結果高亮展示

# 3 結果高亮顯示(默認情況)
GET gyy/doc/_search
{
  "query": {
    "match": {
      "name": "石頭"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}
# 定制高亮顯示的樣式
GET gyy/chengyuan/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "highlight": {
    "pre_tags": "<b class='key' style='color:red'>",
    "post_tags": "</b>",
    "fields": {
      "from": {}
    }
  }
}

小結:

混合開發,你知道怎么處理

前后端分離,你怎么處理?

<b class='key' style='color:red'>串直接以josn格式返回,前端自行渲染

用的最多就是match+布爾+高亮+分頁

7 聚合查詢avg、max、min、sum、分組

# 聚合查詢
# 1 聚合查詢之avg
select max(age) as my_avg from user;
GET gyy/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_avg": {
      "avg": {
        "field": "age"
      }
    }
  },
  "_source": ["name", "age"]
}
# 2 聚合查詢之max,size=0表示不取數據,只要max的結果
GET gyy/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_max": {
      "max": {
        "field": "age"
      }
    }
  },
  "size": 0
}
# 3 聚合之min
GET gyy/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_min": {
      "min": {
        "field": "age"
      }
    }
  },
  "size": 0
}
# 4 聚合查詢之sum
GET gyy/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_sum": {
      "sum": {
        "field": "age"
      }
    }
  },
  "size": 0
}
# 5 聚合之分組
GET gyy/doc/_search
{
  "size": 0, 
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_group": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 15,
            "to": 20
          },
          {
            "from": 20,
            "to": 25
          },
          {
            "from": 25,
            "to": 30
          }
        ]
      }
    }
  }
}

8 mapping和_template模版

GET _template/user_instagram  # 查看模版
PUT _template/user_instagram  # 修改模版
{跟字段信息數據}
GET user_instagram/_mapping  # 查看索引信息
PUT user_instagram/_mapping  # 修改索引信息
{跟字段信息數據}

模版中如果有name字段,存的時候會在索引中自動匹配

模版中如果沒有age字段,存的時候索引找不到字段,存不進去。

需要現在模版中添加字段,再到索引中添加字段,索引生成之后需要手動添加字段,不會自動生成
 

# 查看索引信息---》mapping字典---》映射(類型,表類型,表結構)
GET user_instagram/_mapping
# 6.x以后一個索引只能有一個映射類型(只能有一個表)
# 創建映射
# 創建索引,并設置映射
PUT _template/user_instagram
{
    "order" : 1,
    "index_patterns" : [
      "user_instagram-v1_0"
    ],
    "settings" : {
      "index" : {
        "default_pipeline" : "auto_timestamp_pipeline",
        "mapping" : {
          "total_fields" : {
            "limit" : "10000"
          }
        },
        "refresh_interval" : "600s",
        "number_of_shards" : "8",
        "number_of_replicas" : "0",
        "max_inner_result_window" : "50000"
      }
    },
    "mappings" : {
      "_meta" : {
        "software_version_mapping" : "1.0"
      },
      "dynamic" : "strict",
      "properties" : {
        "is_private" : {
          "type" : "boolean"
        },
        "full_name" : {
          "type" : "text"
        },
        "create_time" : {
          "type" : "date"
        },
        "avatar_url" : {
          "type" : "text"
        },
        "user_id" : {
          "eager_global_ordinals" : true,
          "type" : "keyword"
        },
        "follower_num" : {
          "type" : "integer"
        },
        "following_num" : {
          "type" : "integer"
        },
        "post_count" : {
          "type" : "integer"
        },
        "nickname" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "ignore_above" : 256,
              "type" : "keyword"
            }
          },
          "doc_values" : false
        },
        "requested_by_viewer" : {
          "type" : "boolean"
        },
        "is_verified" : {
          "type" : "boolean"
        },
        "followed_by_viewer" : {
          "type" : "boolean"
        }
      }
    },
    "aliases" : {
      "user_instagram" : { }
    }
  }
# 插入測試數據
PUT books/_doc/1
{
  "title":"大頭兒子小偷爸爸",
  "price":100,  
  "addr":"北京天安門",
  "company":{
    "name":"我愛北京天安門",
    "company_addr":"我的家在東北松花江傻姑娘",
    "employee_count":10
  },
  "publish_date":"2019-08-19"
}
PUT books/_doc/2
{
  "title":"白雪公主和十個小矮人",
  "price":"99",
  "addr":"黑暗森里",
  "company":{
    "name":"我的家鄉在上海",
    "company_addr":"朋友一生一起走",
    "employee_count":10
  },
  "publish_date":"2018-05-19"
}
PUT books/_doc/3
{
  "title":"白雪公主和十個小矮人",
  "price":"99",
  "addr":"黑暗森里",
  "age":18
}
# 查看映射
GET books
GET books/_mapping

映射是什么?映射有什么用?  規定了表結構(不是強制的),規定了哪個字段是可以用來全文檢索,是否是數字類型,布爾類型

mapping類型一旦確定,以后就不能修改了,但是可以插入字段

9 ik分詞

# 全文檢索,有了映射,決定了我可以對某個字段做全文檢索
# es默認分詞對英文友好,使用中文分詞器(es的插件),ik(作者,中國人,elasticsearch開源社區負責人)
# 是es的一個插件(es如何安裝插件)
#第一種:命令行(內置插件)
  	bin/elasticsearch-plugin install analysis-smartcn  安裝中文分詞器
#第二種:url安裝(第三方插件)
  	bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip
#第三種:手動安裝(推薦用)
  #下載,解壓到es的plugins路徑下,重啟es即可
  #注意:ik分詞器跟es版本一定要對應
# 兩種分詞方式
  # ik_smart:分詞分的
  # ik_max_word :分詞分的多
  # ik_smart分的詞少,粒度大
  GET _analyze
  {
    "analyzer": "ik_smart",
    "text": "上海自來水來自海上"
  }
  # ik_smart分的詞多,粒度小
  GET _analyze
  {
    "analyzer": "ik_max_word",
    "text": "上海自來水來自海上"
  }
# 在創建映射的時候配置
# 以后你的操作:
#文章標題:ik_max_word
#文章內容:ik_smart
#摘要
#作者
#創建時間

10 term和match的區別

# match:我們今天出去玩 ----》分詞---》按分詞去搜
#term:我們今天出去玩---》直接拿著[我們今天出去玩]---&gt;去索引中查詢
# 查不到內容,直接拿著  Python爬蟲 去查,因為沒有索引,所以查不到
GET books/_search
{
  "query":{
    "term":{
      "title":"Python爬蟲"
    }
  }
}
# 能查到,而且帶python的都查出來了
# Python   爬蟲  分了詞,分別拿著這兩個詞去查,帶python關鍵字,帶爬蟲關鍵字都能查到
GET books/_search
{
  "query":{
    "match":{
      "title":"Python爬蟲"
    }
  }
}

以上就是關于“Elasticsearch聚合查詢及排序的方法”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清镇市| 都安| 梓潼县| 甘孜| 平和县| 乃东县| 钟祥市| 庆云县| 城固县| 蕉岭县| 黄冈市| 博爱县| 渑池县| 襄汾县| 南部县| 宜春市| 乳源| 重庆市| 高尔夫| 西平县| 霍邱县| 宜兰县| 巢湖市| 广东省| 永寿县| 托克逊县| 响水县| 汕尾市| 茂名市| 隆安县| 微博| 平谷区| 视频| 图们市| 天长市| 五华县| 桃江县| 太湖县| 怀来县| 略阳县| 高密市|