~~~
## 高級查詢
### 說明
? ES中提供了一種強大的檢索數據方式,這種檢索方式稱之為`Query DSL`<Domain Specified Language> ,`Query DSL`是利用`Rest API傳遞JSON格式的請求體(Request Body)數據`與ES進行交互,這種方式的`豐富查詢語法`讓ES檢索變得`更強大,更簡潔`。
### 語法
```markdown
# GET /索引名/_doc/_search {json格式請求體數據}
# GET /索引名/_search {json格式請求體數據}
```
- 測試數據
```markdown
# 1.創建索引 映射
PUT /products/
{
"mappings": {
"properties": {
"title":{
"type": "keyword"
},
"price":{
"type": "double"
},
"created_at":{
"type":"date"
},
"description":{
"type":"text"
}
}
}
}
# 2.測試數據
PUT /products/_doc/_bulk
{"index":{}}
{"title":"iphone12 pro","price":8999,"created_at":"2020-10-23","description":"iPhone 12 Pro采用超瓷晶面板和亞光質感玻璃背板,搭配不銹鋼邊框,有銀色、石墨色、金色、海藍色四種顏色。寬度:71.5毫米,高度:146.7毫米,厚度:7.4毫米,重量:187克"}
{"index":{}}
{"title":"iphone12","price":4999,"created_at":"2020-10-23","description":"iPhone 12 高度:146.7毫米;寬度:71.5毫米;厚度:7.4毫米;重量:162克(5.73盎司) [5] 。iPhone 12設計采用了離子玻璃,以及7000系列鋁金屬外殼。"}
{"index":{}}
{"title":"iphone13","price":6000,"created_at":"2021-09-15","description":"iPhone 13屏幕采用6.1英寸OLED屏幕;高度約146.7毫米,寬度約71.5毫米,厚度約7.65毫米,重量約173克。"}
{"index":{}}
{"title":"iphone13 pro","price":8999,"created_at":"2021-09-15","description":"iPhone 13Pro搭載A15 Bionic芯片,擁有四種配色,支持5G。有128G、256G、512G、1T可選,售價為999美元起。"}
```
### 常見檢索
#### 查詢所有[match_all]
> **match_all關鍵字:** 返回索引中的全部文檔
```http
GET /products/_search
{
"query": {
"match_all": {}
}
}
```
#### 關鍵詞查詢(term)
> **term 關鍵字**: 用來使用關鍵詞查詢
```http
GET /products/_search
{
"query": {
"term": {
"price": {
"value": 4999
}
}
}
}
```
> NOTE1: 通過使用term查詢得知ES中默認使用分詞器為`標準分詞器(StandardAnalyzer),標準分詞器對于英文單詞分詞,對于中文單字分詞`。
> NOTE2: 通過使用term查詢得知,`在ES的Mapping Type 中 keyword , date ,integer, long , double , boolean or ip 這些類型不分詞,只有text類型分詞`。
#### 范圍查詢[range]
> **range 關鍵字**: 用來指定查詢指定范圍內的文檔
```http
GET /products/_search
{
"query": {
"range": {
"price": {
"gte": 1400,
"lte": 9999
}
}
}
}
```
#### 前綴查詢[prefix]
> **prefix 關鍵字**: 用來檢索含有指定前綴的關鍵詞的相關文檔
```http
GET /products/_search
{
"query": {
"prefix": {
"title": {
"value": "ipho"
}
}
}
}
```
#### 通配符查詢[wildcard]
> **wildcard 關鍵字**: 通配符查詢 **? 用來匹配一個任意字符 * 用來匹配多個任意字符**
```http
GET /products/_search
{
"query": {
"wildcard": {
"description": {
"value": "iphon*"
}
}
}
}
```
#### 多id查詢[ids]
> **ids 關鍵字** : 值為數組類型,用來根據一組id獲取多個對應的文檔
```http
GET /products/_search
{
"query": {
"ids": {
"values": ["verUq3wBOTjuBizqAegi","vurUq3wBOTjuBizqAegk"]
}
}
}
```
#### 模糊查詢[fuzzy]
> **fuzzy 關鍵字**: 用來模糊查詢含有指定關鍵字的文檔
```http
GET /products/_search
{
"query": {
"fuzzy": {
"description": "iphooone"
}
}
}
```
> 注意: `fuzzy 模糊查詢 最大模糊錯誤 必須在0-2之間`
>
> - 搜索關鍵詞長度為 2 不允許存在模糊
>
> - 搜索關鍵詞長度為3-5 允許一次模糊
>
> - 搜索關鍵詞長度大于5 允許最大2模糊
#### 布爾查詢[bool]
> **bool 關鍵字**: 用來組合多個條件實現復雜查詢
>
> ? **must: 相當于&& 同時成立**
>
> ? **should: 相當于|| 成立一個就行**
>
> ? **must_not: 相當于! 不能滿足任何一個**
```http
GET /products/_search
{
"query": {
"bool": {
"must": [
{"term": {
"price": {
"value": 4999
}
}}
]
}
}
}
```
#### 多字段查詢[multi_match]
```http
GET /products/_search
{
"query": {
"multi_match": {
"query": "iphone13 毫",
"fields": ["title","description"]
}
}
}
注意: 字段類型分詞,將查詢條件分詞之后進行查詢改字段 如果該字段不分詞就會將查詢條件作為整體進行查詢
```
#### 默認字段分詞查詢[query_string]
```http
GET /products/_search
{
"query": {
"query_string": {
"default_field": "description",
"query": "屏幕真的非常不錯"
}
}
}
注意: 查詢字段分詞就將查詢條件分詞查詢 查詢字段不分詞將查詢條件不分詞查詢
```
#### 高亮查詢[highlight]
> **highlight 關鍵字**: 可以讓符合條件的文檔中的關鍵詞高亮
```http
GET /products/_search
{
"query": {
"term": {
"description": {
"value": "iphone"
}
}
},
"highlight": {
"fields": {
"*":{}
}
}
}
```
> **自定義高亮html標簽**: 可以在highlight中使用`pre_tags`和`post_tags`
```http
GET /products/_search
{
"query": {
"term": {
"description": {
"value": "iphone"
}
}
},
"highlight": {
"post_tags": ["</span>"],
"pre_tags": ["<span style='color:red'>"],
"fields": {
"*":{}
}
}
}
```
> 多字段高亮 使用`require_field_match`開啟多個字段高亮
```http
GET /products/_search
{
"query": {
"term": {
"description": {
"value": "iphone"
}
}
},
"highlight": {
"require_field_match": "false",
"post_tags": ["</span>"],
"pre_tags": ["<span style='color:red'>"],
"fields": {
"*":{}
}
}
}
```
#### 返回指定條數[size]
> **size 關鍵字**: 指定查詢結果中返回指定條數。 **默認返回值10條**
```http
GET /products/_search
{
"query": {
"match_all": {}
},
"size": 5
}
```
#### 分頁查詢[form]
> **from 關鍵字**: 用來指定起始返回位置,和**size關鍵字連用可實現分頁效果**
```http
GET /products/_search
{
"query": {
"match_all": {}
},
"size": 5,
"from": 0
}
```
#### 指定字段排序[sort]
```http
GET /products/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
```
#### 返回指定字段[_source]
> **_source 關鍵字**: 是一個數組,在數組中用來指定展示那些字段
```http
GET /products/_search
{
"query": {
"match_all": {}
},
"_source": ["title","description"]
}
```
~~~
- 文檔說明
- 開始
- linux
- 常用命令
- ps -ef
- lsof
- netstat
- 解壓縮
- 復制
- 權限
- 其他
- lnmp集成安裝
- supervisor
- 安裝
- supervisor進程管理
- nginx
- 域名映射
- 負載均衡配置
- lnmp集成環境安裝
- nginx源碼安裝
- location匹配
- 限流配置
- 日志配置
- 重定向配置
- 壓縮策略
- nginx 正/反向代理
- HTTPS配置
- mysql
- navicat創建索引
- 設置外網鏈接mysql
- navicat破解
- sql語句學習
- 新建mysql用戶并賦予權限
- php
- opcache
- 設計模式
- 在CentOS下安裝crontab服務
- composer
- 基礎
- 常用的包
- guzzle
- 二維碼
- 公共方法
- 敏感詞過濾
- IP訪問頻次限制
- CURL
- 支付
- 常用遞歸
- 數據排序
- 圖片相關操作
- 權重分配
- 毫秒時間戳
- base64<=>圖片
- 身份證號分析
- 手機號相關操作
- 項目搭建 公共處理函數
- JWT
- 系統函數
- json_encode / json_decode 相關
- 數字計算
- 數組排序
- php8
- jit特性
- php8源碼編譯安裝
- laravel框架
- 常用artisan命令
- 常用查詢
- 模型關聯
- 創建公共方法
- 圖片上傳
- 中間件
- 路由配置
- jwt
- 隊列
- 定時任務
- 日志模塊
- laravel+swoole基本使用
- 拓展庫
- 請求接口log
- laravel_octane
- 微信開發
- token配置驗證
- easywechart 獲取用戶信息
- 三方包
- webman
- win下熱更新代碼
- 使用laravel db listen 監聽sql語句
- guzzle
- 使用workman的httpCLient
- 修改隊列后代碼不生效
- workman
- 安裝與使用
- websocket
- eleticsearch
- php-es 安裝配置
- hyperf
- 熱更新
- 安裝報錯
- swoole
- 安裝
- win安裝swoole-cli
- google登錄
- golang
- 文檔地址
- 標準庫
- time
- 數據類型
- 基本數據類型
- 復合數據類型
- 協程&管道
- 協程基本使用
- 讀寫鎖 RWMutex
- 互斥鎖Mutex
- 管道的基本使用
- 管道select多路復用
- 協程加管道
- beego
- gin
- 安裝
- 熱更新
- 路由
- 中間件
- 控制器
- 模型
- 配置文件/conf
- gorm
- 初始化
- 控制器 模型查詢封裝
- 添加
- 修改
- 刪除
- 聯表查詢
- 環境搭建
- Windows
- linux
- 全局異常捕捉
- javascript
- 常用函數
- vue
- vue-cli
- 生產環境 開發環境配置
- 組件通信
- 組件之間通信
- 父傳子
- 子傳父
- provide->inject (非父子)
- 引用元素和組件
- vue-原始寫法
- template基本用法
- vue3+ts項目搭建
- vue3引入element-plus
- axios 封裝網絡請求
- computed 計算屬性
- watch 監聽
- 使用@符 代替文件引入路徑
- vue開發中常用的插件
- vue 富文本編輯
- nuxt
- 學習筆記
- 新建項目踩坑整理
- css
- flex布局
- flex PC端基本布局
- flex 移動端基本布局
- 常用css屬性
- 盒子模型與定位
- 小說分屏顯示
- git
- 基本命令
- fetch
- 常用命令
- 每次都需要驗證
- git pull 有沖突時
- .gitignore 修改后不生效
- 原理解析
- tcp與udp詳解
- TCP三次握手四次揮手
- 緩存雪崩 穿透 更新詳解
- 內存泄漏-內存溢出
- php_fpm fast_cgi cig
- redis
- 相關三方文章
- API對外接口文檔示范
- elaticsearch
- 全文檢索
- 簡介
- 安裝
- kibana
- 核心概念 索引 映射 文檔
- 高級查詢 Query DSL
- 索引原理
- 分詞器
- 過濾查詢
- 聚合查詢
- 整合應用
- 集群
- docker
- docker 簡介
- docker 安裝
- docker 常用命令
- image 鏡像命令
- Contrainer 容器命令
- docker-compose
- redis 相關
- 客戶端安裝
- Linux 環境下安裝
- uni
- http請求封裝
- ios打包
- 視頻縱向播放
- 日記
- 工作日記
- 情感日志
- 壓測
- ab
- ui
- thorui
- 開發規范
- 前端
- 后端
- 狀態碼
- 開發小組未來規劃