Elasticsearch從安裝到實戰、kibana安裝以及自定義IK分詞器/集成整合SpringBoot詳細的教程ES(三)

?DSL官方地址:

DSL查詢分類

Elasticsearch提供了基于JSON的DSL(https://www.elastic.co/docs/explore-analyze/query-filter/languages/querydsl)來定義查詢。常見的查詢類型包括:

  • 查詢所有:查詢出所有數據,一般測試用。例如:match_all

  • 全文檢索(full text)查詢:利用分詞器對用戶輸入內容分詞,然后去倒排索引庫中匹配。例如:

    • match_query

    • multi_match_query

  • 精確查詢:根據精確詞條值查找數據,一般是查找keyword、數值、日期、boolean等類型字段。例如:

    • ids

    • range

    • term

  • 地理(geo)查詢:根據經緯度查詢。例如:

    • geo_distance

    • geo_bounding_box

  • 復合(compound)查詢:復合查詢可以將上述各種查詢條件組合起來,合并查詢條件。例如:

    • bool

    • function_score

查詢所有

Query基本語法

?match查詢:全文檢索查詢的一種,會對用戶輸入內容分詞,然后去倒排索引庫檢索,語法:

GET /hotel/_search
{"query": {"match_all": {}}
}

全文檢索

GET /hotel/_search
{"query": {"match": {"all": "速8北京后海"}}
}

multi_match:與match查詢類似,只不過允許同時查詢多個字段

GET /hotel/_search
{"query": {"multi_match": {"query": "北京后海速8","fields": ["brand","name"]}}
}

這兩個比較 上面的 效率要高?

GET /hotel/_search
{
? "query": {
? ? "match": {
? ? ? "all": "速8北京后海"
? ? }
? }
}


GET /hotel/_search
{
? "query": {
? ? "multi_match": {
? ? ? "query": "北京后海速8",
? ? ? "fields": ["brand","name"]
? ? }
? }
}

精確查詢?

精確查詢一般是查找keyword、數值、日期、boolean等類型字段。所以不會對搜索條件分詞

term查詢?

# 精確查找
GET /hotel/_search
{"query":{"term": {"city": {"value": "北京"}}}}

區間查詢

?區間查詢 價格 100-200 gt:大于 ?lt:小于

區間查詢 價格 100-200 gte:大于等于 lte:小于等于

# 區間查詢 價格 100-200 gte:大于等于 lte:小于等于
GET /hotel/_search
{"query": {"range": {"price": {"gte": 100,"lte": 200}}}
}# 區間查詢 價格 100-200 gt:大于  lt:小于
GET /hotel/_search
{"query": {"range": {"price": {"gt": 1000,"lt": 2000}}}
}

地理查詢?

geo_distance 查詢?

# geo_distance 查詢
GET /hotel/_search
{"query": {"geo_distance":{"distance":"5km","location":"31.23462, 121.47327"}}
}

查詢附近的 15km 千米 46 家

查詢附近的 5km 千米 15 家

復合查詢

復合(compound)查詢:復合查詢可以將其它簡單查詢組合起來,實現更復雜的搜索邏輯。常見的有兩種:

  • function score:算分函數查詢,可以控制文檔相關性算分,控制文檔排名

  • bool query:布爾查詢,利用邏輯關系組合多個其它的查詢,實現復雜搜索

Function Score Query

使用 function score query,可以修改文檔的相關性算分(query score),根據新得到的算分排序。

測試案例?給“如家”這個品牌的酒店排名靠前一些

# function_score 查詢
GET /hotel/_search
{"query": {"function_score": {"query": {"match": {"all": "外灘"}},"functions": [{"filter": {"term": {"brand": "如家"}},"weight": 10}],"boost_mode": "sum"}}
}

function score query定義的三要素是
過濾條件:哪些文檔要加分
算分函數:如何計算function ?score
加權方式:function score 與 query score如何運算

復合查詢 Boolean Query

布爾查詢是一個或多個查詢子句的組合,每一個子句就是一個子查詢。子查詢的組合方式有:

  • must:必須匹配每個子查詢,類似“與”

  • should:選擇性匹配子查詢,類似“或”

  • must_not:必須不匹配,不參與算分,類似“非”

  • filter:必須匹配,不參與算分

語法示例
GET /hotel/_search
{"query": {"bool": {"must": [{"match": {"name": "如家"}}],"must_not": [{"range": {"price": {"gt": 400}}}],"filter": [{"geo_distance": {"distance": "10km","location": {"lat": 31.21,"lon": 121.5}}}]}}
}

must 里面會參與算分,參與字段越多 性能越差,如不需要算分的就移除到?filter 里面

搜索結果處理

排序

????????elasticsearch默認是根據相關度算分(_score)來排序,但是也支持自定義方式對搜索結果排序。可以排序字段類型有:keyword類型、數值類型、地理坐標類型、日期類型等

keyword、數值、日期類型排序的語法基本一致

普通排序

語句

# sort 排序 查詢
GET /hotel/_search
{"query": {"match_all": {}},"sort": [{"score": "desc"},{"price": "asc"}]
}

地理坐標排序

地理坐標 升序排序

# 安 地理坐標 升序排序
GET /hotel/_search
{"query": {"match_all": {}},"sort": [{"_geo_distance": {"location": {"lat": 31.034661,"lon": 121.612282},"order": "asc","unit": "km"}}]
}

分頁

基本的分頁
# 分頁
GET /hotel/_search
{"query": {"match_all": {}},"from": 10,"size": 5,"sort": [{"price": "desc"}]
}

深度分頁問題

高亮

語法

GET /hotel/_search
{"query": {"match": {"name": "如家"}},"highlight": {"fields": {"name": {}}}
}

GET /hotel/_search
{"query": {"match": {"all": "如家"}},"highlight": {"fields": {"name": {"require_field_match": "false"}}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84616.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84616.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84616.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我們來學mysql -- keepalive主從高可用

keepalive主從高可用 簡明扼要安裝KP場景“高可用”配置主keepalived.conf從keepalived.confmysql_check.sh 高可用驗證KP運行情況通過vip連接mysqlvip連接上創建數據庫關閉主庫所在服務器的KPvip連接上再次創建數據庫 結尾 簡明扼要 搭建mysql的主從八股文如是:主…

Compose筆記(二十六)--DatePicker

這一節主要了解一下Compose中的DatePicker,DatePicker是一個用于選擇日期的組件,它提供了直觀的界面讓用戶可以通過日歷視圖或直接輸入來選擇年、月、日。我們在開發中時常會用到日期選擇器,簡單總結如下: API: DatePickerDialog onDismissRequest&…

【靶場】upload-labs-文件上傳漏洞闖關

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言1.第一關1.保存html頁面2.修改頁面html3.訪問修改后的本地html文件4.上傳php文件5.訪問上傳的php2.第二關1.抓上傳包修改文件類型2.上傳成功3.第三關1.phtml php3會被解析為php原理2.上傳成功4…

基于 Transformer RoBERTa的情感分類任務實踐總結之四——PGM、EMA

整合了以下五大核心技術:R-Drop、PGM 對抗訓練、EMA、標簽平滑、CosineAnnealing 學習率調度。 1. R-Drop(Regularized Dropout) 原理:同一個樣本做兩次前向傳播(同 dropout mask),計算兩次輸…

錄制mp4 rospy

ros 預覽攝像頭 #!/usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge import cv2# 初始化 bridge bridge CvBridge()def image_callback(msg):# 將ROS圖像消息轉換為OpenCV圖像cv_image bridge.imgmsg_to_cv2(msg, desir…

超簡單部署離線語音合成TTS和語音識別

一篇文章講清楚超簡單 離線語音合成TTS 和 離線語音識別 系統部署 本文只介紹兩個輕量級的 語音合成用piper, 語音識別用vosk 部署簡單,效果勉強 語音合成 推薦 piper (其他沒用過) 安裝 linux下安裝 pip install piper-tts下載模型(63M) 中文模型下載 zh_CN-huayan-medi…

【算力網】

一、算力網-DNS 1.1、核心架構設計 1.1.1 設計框架 基于SRv6的智能DNS算法設計框架,結合IPv6路由可編程性、動態路徑優化及業務感知能力,實現網絡性能與用戶體驗的雙重提升:? ?SRv6-DNS融合架構? ?控制平面?: DNS服務器集…

shell分析nginx日志的指令

shell指令 查看有多少個IP訪問: awk {print $1} log_file|sort|uniq|wc -l 查看某一個頁面被訪問的次數: grep "/index.php" log_file | wc -l 查看每一個IP訪問了多少個頁面: awk {S[$1]} END {for (a in S) print a,S[a]} …

CMS軟件以及常見分類

CMS(Content Management System,內容管理系統)是 讓非技術人員也能便捷創建、編輯、管理網站內容的軟件 ,核心是 分離 “內容” 和 “頁面設計”(內容存在數據庫,頁面用模板生成),無…

Spring @Value 典型用法

典型用法 注入常量值 Value("Hello World") private String message;注入配置文件中的屬性值(如 application.properties) // 假設你有如下配置: app.nameMyApp app.version1.0.0// Java 類中使用: Value("${ap…

golang -- map實現原理

目錄 一、前言二、結構1. hmap(map) 結構2. bmap(buckets) 結構 三、哈希沖突四、負載因子五、哈希函數六、擴容增量擴容等量擴容 一、前言 在現代編程語言中,map 是一種非常重要的數據結構,廣泛用于存儲和快速查找鍵值對。Go 語言中的 map 是一種高效且…

Vue2 Extends 繼承機制與組件復用實踐

extends在某些場景下依然發揮作用,如Options API。子組件將繼承父組件的屬性、方法、生命周期鉤子函數以及混合(mixins)等選項。 注意:子組件可以覆蓋、或繼承擴展父組件的選項。子組件的生命周期鉤子和父組件的鉤子一起執行。 &l…

openSUSE MicroOS不可變Linux

openSUSE MicroOS不可Linux 1、openSUSE MicroOS簡介安裝時可能遇到的問題 2、ssh登錄3、openSUSE MicroOS配置國內軟件源4、系統變更openSUSE MicroOS安裝軟件包方法1:進入事務性更新模式安裝軟件包方法2:繼續快照id基于這個快照進行增量安裝方法3&…

建站SEO優化之站點地圖sitemap

文章目錄 編寫規范小型網站站點地圖小型網站規范示例站點地圖說明 大型網站站點地圖大型網站規范示例以豆瓣站點地圖為例 近期文章: 個人建站做SEO網站外鏈這一點需要注意,做錯了可能受到Google懲罰一文搞懂SEO優化之站點robots.txt網頁常見水印實現方式…

Java分層開發必知:PO、BO、DTO、VO、POJO概念詳解

目錄 引言一、核心概念與定義1、PO(Persistent Object,持久化對象)2、BO(Business Object,業務對象)3、DTO(Data Transfer Object,數據傳輸對象)4、VO(View O…

Linux下OLLAMA安裝卡住怎么辦?

網絡環境不理想,經常在官方的linux安裝腳本執行時卡住,其實主要是下載文件卡住,于是我想到了是否可以把其中下載的過程顯化、分步,這樣更可控,于是修改了官方的install.sh #!/bin/sh # This script installs Ollama o…

C++面試(5)-----刪除鏈表中指定值的節點

操作系統:ubuntu22.04 IDE:Visual Studio Code 編程語言:C11 算法描述 給定一個單向鏈表的頭節點 head 和一個特定值 val,要求編寫一個函數來刪除鏈表中所有值等于 val 的節點,并返回修改后的鏈表頭節點。 示例: 輸…

如何用AI賦能學習

由于博主是大學生,今天花費了大量的時間去進行期末的復習,不過從復習中得到了一些學習的靈感,即:如何用AI賦能學習 當我們需要掌握一門新的技能的時候,我們很容易的想到三種辦法:買書自己學,報…

【threejs】每天一個小案例講解:常見材質

代碼倉 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone,無需安裝依賴,直接liver-server運行/直接打開chapter01中的html文件 運行效果圖 知識要點 1. MeshBasicMaterial(基礎網格材質) ? 特…

springboot后端與鴻蒙的結合

軟件:鴻蒙devceo3.1,springboot項目采用IDEA 目的: 1、結合springboot后端與鴻蒙的結合運用。 2、Log日志查看console語句的信息。 3、引入 import http from ohos.net.http。 4、調用springboot后端提供的鏈接發送post 5、TextInput的…