網站首頁 編程語言 正文
文章目錄
- match查詢
- 單條件匹配查詢
- 單字段多條件匹配查詢
- term查詢
- 查詢附加操作
- 篩選字段
- 排序
- limit操作
- 多條件查詢
- AND查詢
- OR查詢
- 不等于查詢
- 范圍查詢
- 高亮查詢
match查詢
單條件匹配查詢
GET /索引名/類型名/_search
{
"query": {
"match": {
"文檔字段名": "文檔字段值"
}
}
}
GET yzq/user/_search
{
"query": {
"match": {
"name": "java"
}
}
}
如果文檔中被匹配的字段包含中文則會進行模糊搜索,如果只有英文則會精確搜索,舉例說明:
字段名 | 文檔1 | 文檔2 | 文檔3 |
---|---|---|---|
name | java | java123 | java張三 |
如果name匹配java的話可以匹配到java、java張三但是匹配不到java123。
單字段多條件匹配查詢
GET yzq/user/_search
{
"query": {
"match": {
"文檔字段名": "字段值1 字段值2"(多個字段值以空格分開)
}
}
}
查詢索引中tags中包含男、技術關鍵詞的文檔,會檢索出包含男關鍵詞、技術關鍵詞、以及兩個都包含的文檔,包含越多的查詢排名越靠前。
GET yzq/user/_search
{
"query": {
"match": {
"tags": "男 技術"
}
}
}
通常tags的值像是這樣:“tags”: [“技術宅”,“溫暖”,“直男”]
term查詢
GET /索引名/類型名/_search
{
"query": {
"term": {
"文檔字段名": "文檔字段值"
}
}
}
GET yzq/user/_search
{
"query": {
"term": {
"name": "爪哇 java"
}
}
}
term和match關鍵字的區別在于是否將查詢的字段值做拆分,以上面的GET查詢為例。
- 如果使用term則name字段不會被分詞器拆分,因此本次查詢會根據“爪哇 java”這個詞到倒排索引中進行匹配;
- 如果使用match則name字段會被分詞器拆分為“爪哇”和“java”再拿這兩個單次到倒排索引中進行匹配(或的關系,只要有一個匹配成就算成功)
text和keyword是指在建立索引時聲明的某個字段的類型。
- 如果是text則新插入文檔時就會對該字段進行分詞處理后,把分好的詞寫入倒排索引中,以上面的GET為例會把“爪哇”和“java”這兩個詞寫入倒排索引
- 如果是keyword則新插入文檔時不會對該字段進行分析處理,直接把單次完整的寫入倒排索引中,以上面的GET為例則只會把“爪哇 java”這個完整的詞寫入倒排索引
通常情況下是如下搭配:
- match + text (如果是term + text,使用term查詢時,查詢條件不會進行分詞。但是text類型的數據,在倒排索引中實際存儲的是分詞的數據。term條件區分大小寫,而text數據經過默認的standard analyzer分詞器分詞,大寫字母全部轉為了小寫字母,并存入了倒排索引以供搜索,所以這里需要注意大小寫匹配的問題)
- term + keyword(如果是match + keyword則等效term)
查詢附加操作
篩選字段
如果不想要文檔中的所有字段值的話可以通過_source字段來篩選出想要的值。附上格式和例子:
GET /索引名/類型名/_search
{
"query": {
"match": {
"文檔字段名": "文檔字段值"
}
}
"_source": ["字段1", "字段2", ...]
}
GET yzq/user/_search
{
"query": {
"match": {
"name": "java"
}
},
"_source": ["name", "desc"]
}
排序
GET /索引名/類型名/_search
{
"query": {
"match": {
"文檔字段名": "文檔字段值"
}
}
"sort": [
{
"文檔字段名": {
"order": "asc"/"desc"(二選一)
}
}
]
}
GET yzq/user/_search
{
"query": {
"match": {
"name": "java"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
limit操作
GET /索引名/類型名/_search
{
"query": {
"match": {
"文檔字段名": "文檔字段值"
}
}
"sort": [
{
"文檔字段名": {
"order": "asc"/"desc"(二選一)
}
}
]
"from": 從哪開始(默認第一條文檔下標為0),
"size": 截取多少條
}
GET yzq/user/_search
{
"query": {
"match": {
"name": "java"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 1
}
多條件查詢
這種查詢支持多個條件同時查詢,這些條件的關系可以是AND(must)和OR(should)
AND查詢
GET yzq/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"文檔字段名1": "文檔字段值1"
}
},
{
"match": {
"文檔字段名2": 文檔字段值2
}
}
]
}
}
}
查詢索引中name匹配java而且age為23的文檔
GET yzq/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "java"
}
},
{
"match": {
"age": 23
}
}
]
}
}
}
OR查詢
GET yzq/user/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"文檔字段名1": "文檔字段值1"
}
},
{
"match": {
"文檔字段名2": 文檔字段值2
}
}
]
}
}
}
查詢索引中name匹配java或者age為23的文檔
GET yzq/user/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "java"
}
},
{
"match": {
"age": 23
}
}
]
}
}
}
不等于查詢
關鍵字must_not
GET yzq/user/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"文檔字段名": 文檔字段值
}
}
]
}
}
}
查詢索引中age不等于3的文檔
GET yzq/user/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"age": 3
}
}
]
}
}
}
范圍查詢
GET yzq/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "java"
}
}
],
"filter": {
"range": {
"文檔字段名": {
"gte": 值大于等于多少,也可以是大于多少(gt),
"lte": 值小于等于多少,也可以是小于多少(lt)
}
}
}
}
}
}
查詢索引中name匹配java的文檔中并且age值小于10的所有文檔
GET yzq/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "java"
}
}
],
"filter": {
"range": {
"age": {
"lt": 10
}
}
}
}
}
查詢索引中age大于等于10且小于等于30的所有文檔
GET yzq/user/_search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 30
}
}
}
}
高亮查詢
- 默認高亮顯示的標簽是em,也可以日通過pre_tags和post_tags改成自己想要的標簽,遵循html頁面的寫法。
GET yzq/user/_search
{
"query": {
"match": {
"name": "java"
}
},
"highlight": {
"pre_tags": "想要定義的前綴",
"pre_tags": "想要定義的后綴",
"fields": {
"需要匹配的字段名":{}
}
}
}
查詢索引中name匹配java的所有文檔,并高亮顯示查詢的name字段。
GET yzq/user/_search
{
"query": {
"match": {
"name": "java"
}
},
"highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields": {
"需要匹配的字段名":{}
}
}
}
原文鏈接:https://blog.csdn.net/koutaoran4812/article/details/126167985
相關推薦
- 2022-04-14 解決Mac環境下zsh: command not found:
- 2022-07-06 Nginx的mirror指令示例配置_nginx
- 2022-09-18 Golang實現文件傳輸功能_Golang
- 2023-02-03 C++中的HTTP協議問題_C 語言
- 2022-05-17 bat批處理之字符串操作的實現_DOS/BAT
- 2022-10-22 Python中的Unittest基本使用_python
- 2023-10-28 如何給k8s集群里的資源打標簽_云其它
- 2022-10-01 iOS簡單實現輪播圖效果_IOS
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支