国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ElasticSearch級查詢Query DSL上

這篇具有很好參考價值的文章主要介紹了ElasticSearch級查詢Query DSL上。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

ES高級查詢Query DSL

match_all

返回源數(shù)據(jù)_source

返回指定條數(shù)size

分頁查詢from&size

指定字段排序sort

術(shù)語級別查詢

Term query術(shù)語查詢

Terms Query多術(shù)語查詢

exists query

ids query

range query范圍查詢

prefix query前綴查詢

wildcard query通配符查詢

fuzzy query模糊查詢


ES高級查詢Query DSL

? ? ? ?ES中提供了一種強大的檢索數(shù)據(jù)方式,這種檢索方式稱之為Query DSL(Domain Specified Language 領(lǐng)域?qū)S谜Z言),Query DSL是利用Rest API傳遞JSON格式的請求體(RequestBody)數(shù)據(jù)與ES進行交互,這種方式的豐富查詢語法讓ES檢索變得更強大更簡潔。

語法:

GET /es_db/_doc/_search {json請求體數(shù)據(jù)}
可以簡化為下面寫法
GET /es_db/_search {json請求體數(shù)據(jù)}

示例

#無條件查詢,默認返回10條數(shù)據(jù)
GET /user/_search
{
    "query":{
        "match_all":{}
    }
}

ElasticSearch級查詢Query DSL上,分布式中間件,elasticsearch,大數(shù)據(jù),搜索引擎,java,全文檢索,后端

took:花費的時間

total.value:符合條件的總文檔

hits:結(jié)果集,默認前10個文檔

_index:索引名

_id:文檔的id

_score:相關(guān)度評分

source:文檔原生信息

示例數(shù)據(jù)

#指定ik分詞器
PUT /user
{
  "settings" : {
      "index" : {
          "analysis.analyzer.default.type": "ik_max_word"
      }
  }
}

# 創(chuàng)建文檔,指定id
PUT /user/_doc/1
{
"name": "張三",
"sex": 1,
"age": 25,
"address": "北京",
"remark": "java"
}
PUT /user/_doc/2
{
"name": "李四",
"sex": 1,
"age": 28,
"address": "南京",
"remark": "java"
}

PUT /user/_doc/3
{
"name": "王五",
"sex": 0,
"age": 26,
"address": "廣州白云山",
"remark": "php"
}

PUT /user/_doc/4
{
"name": "趙六",
"sex": 0,
"age": 22,
"address": "長沙",
"remark": "python"
}

PUT /user/_doc/5
{
"name": "張龍",
"sex": 0,
"age": 19,
"address": "天津",
"remark": "java"
}    
    
PUT /user/_doc/6
{
"name": "趙虎",
"sex": 1,
"age": 32,
"address": "長沙",
"remark": "java"
}    

PUT /user/_doc/7
{
"name": "李虎",
"sex": 1,
"age": 32,
"address": "廣州",
"remark": "java"
}

PUT /user/_doc/8
{
"name": "張星",
"sex": 1,
"age": 32,
"address": "武漢",
"remark": "golang"
}

match_all

使用match_all,匹配所有文檔,默認只會返回10條數(shù)據(jù)。

原因:_search查詢默認采用的是分頁查詢,每頁記錄數(shù)size的默認值為10。如果想顯示更多數(shù)據(jù),指定size。

GET /user/_search
等同于
GET /user/_search
{
"query":{
"match_all":{}
}
}

返回源數(shù)據(jù)_source

# 返回指定字段
GET /user/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["name","address"]
}

#在查詢中過濾
#不查看源數(shù)據(jù),僅查看元字段
{
  "_source": false,
  "query": {
    ...
  } 
}

#只看以obj.開頭的字段
{
  "_source": "obj.*",
  "query": {
    ...
  } 
}

返回指定條數(shù)size

size 關(guān)鍵字:指定查詢結(jié)果中返回指定條數(shù)。默認返回值10條。

GET /user/_search
{
  "query": {
    "match_all": {}
  },
  "size": 100
}

分頁查詢from&size

size:顯示應(yīng)該返回的結(jié)果數(shù)量,默認是?10

from:顯示應(yīng)該跳過的初始結(jié)果數(shù)量,默認是?0

from 關(guān)鍵字用來指定起始返回位置,和size關(guān)鍵字連用可實現(xiàn)分頁效果

GET /user/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 5  
}

指定字段排序sort

注意:會讓得分失效

GET /user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": "desc"
    }
  ]
}

#排序,分頁
GET /user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": "desc"
    }
  ],
  "from": 10,
  "size": 5
}

術(shù)語級別查詢

? ? ? ?術(shù)語級別查詢(Term-Level Queries)指的是搜索內(nèi)容不經(jīng)過文本分析直接用于文本匹配,這個過程類似于數(shù)據(jù)庫的SQL查詢,搜索的對象大多是索引的非text類型字段。Elasticsearch 中的一些術(shù)語級別查詢示例包括 term、terms 和 range 查詢。

Term query術(shù)語查詢

? ? ? ?術(shù)語查詢直接返回包含搜索內(nèi)容的文檔,常用來查詢索引中某個類型為keyword的文本字段,類似于SQL的“=”查詢,使用十分普遍。

? ? ? ?注意:最好不要在term查詢的字段中使用text字段,因為text字段會被分詞,這樣做既沒有意義,還很有可能什么也查不到。

# 對bool,日期,數(shù)字,結(jié)構(gòu)化的文本可以利用term做精確匹配
# term 精確匹配
GET /user/_search
{
  "query": {
    "term": {
      "age": {
        "value": 28
      }
    }
  }
}



# 采用term精確查詢, 查詢字段映射類型為keyword
GET /user/_search
{
  "query":{
    "term": {
      "address.keyword": {
        "value": "廣州"
      }
    }
  }
}

在ES中,Term查詢,對輸入不做分詞。會將輸入作為一個整體,在倒排索引中查找準確的詞項,并且使用相關(guān)度算分公式為每個包含該詞項的文檔進行相關(guān)度算分。

可以通過 Constant Score 將查詢轉(zhuǎn)換成一個 Filtering,避免算分,并利用緩存,提高性能。

將Query 轉(zhuǎn)成 Filter,忽略TF-IDF計算,避免相關(guān)性算分的開銷,F(xiàn)ilter可以有效利用緩存。

GET /user/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "address.keyword": "廣州"
        }
      }
    }
  }
}

term處理多值字段時,term查詢是包含,不是等于。

POST /employee/_bulk
{"index":{"_id":1}}
{"name":"小明","interest":["跑步","籃球"]}
{"index":{"_id":2}}
{"name":"小紅","interest":["跳舞","畫畫"]}
{"index":{"_id":3}}
{"name":"小麗","interest":["跳舞","唱歌","跑步"]}

POST /employee/_search
{
  "query": {
    "term": {
      "interest.keyword": {
        "value": "跑步"
      }
    }
  }
}

Terms Query多術(shù)語查詢

? ? ? ?Terms query用于在指定字段上匹配多個詞項(terms)。它會精確匹配指定字段中包含的任何一個詞項。

POST /user/_search
{
  "query": {
    "terms": {
      "remark.keyword": ["java", "php"]
    }
  }
}

exists query

在Elasticsearch中可以使用exists進行查詢,以判斷文檔中是否存在對應(yīng)的字段。

#查詢索引庫中存在remarks字段的文檔數(shù)據(jù)
GET /user/_search
{
  "query": {
    "exists": 
    {
      "field": "remark"
    }
  }
}

ids query

ids 關(guān)鍵字?: 值為數(shù)組類型,用來根據(jù)一組id獲取多個對應(yīng)的文檔。

GET /user/_search
{
  "query": {
    "ids": {
      "values": [1,2]
    }
  }
}

range query范圍查詢

  • range:范圍關(guān)鍵字
  • gte 大于等于
  • lte ?小于等于
  • gt 大于
  • lt 小于
  • now 當前時
POST /user/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 25,
        "lte": 28
      }
    }
  }
}

#日期范圍比較
DELETE /product
POST /product/_bulk
{"index":{"_id":1}}
{"price":100,"date":"2021-01-01","productId":"XHDK-1293"}
{"index":{"_id":2}}
{"price":200,"date":"2022-01-01","productId":"KDKE-5421"}

GET /product/_mapping

GET /product/_search
{
  "query": {
    "range": {
      "date": {
        "gte": "now-2y"
      }
    }
  }
}

prefix query前綴查詢

它會對分詞后的term進行前綴搜索。

prefix的原理:需要遍歷所有倒排索引,并比較每個term是否以所指定的前綴開頭。

GET /user/_search
{
  "query": {
    "prefix": {
      "address": {
        "value": "廣州"
      }
    }
  }
}

wildcard query通配符查詢

通配符查詢:工作原理和prefix相同,只不過它不是只比較開頭,它能支持更為復(fù)雜的匹配模式。

GET /user/_search
{
  "query": {
    "wildcard": {
      "address": {
        "value": "*京*"
      }
    }
  }
}

fuzzy query模糊查詢

在實際的搜索中,我們有時候會打錯字,從而導(dǎo)致搜索不到。在Elasticsearch中,我們可以使用fuzziness屬性來進行模糊查詢,從而達到搜索有錯別字的情形。

fuzzy 查詢會用到兩個很重要的參數(shù),fuzziness,prefix_length

1. fuzziness(模糊度)fuzziness參數(shù)指定了允許的編輯距離(Levenshtein距離)。編輯距離是指在兩個字符串之間,從一個字符串轉(zhuǎn)換到另一個字符串所需的最小編輯操作數(shù)(插入、刪除、替換)。在Fuzzy查詢中,編輯距離表示允許的最大差異數(shù)。較大的編輯距離意味著更寬松的匹配條件,允許更多的不匹配。常見的編輯距離值包括0、1、2,其中0表示精確匹配,1表示允許一個字符的差異,2表示允許兩個字符的差異,以此類推。

2. prefix_length(前綴長度)prefix_length參數(shù)用于控制在執(zhí)行Fuzzy查詢時要忽略的術(shù)語的前綴長度。在實際文本中,可能存在大量共享前綴的術(shù)語,而這些前綴不應(yīng)該影響Fuzzy匹配。通過設(shè)置prefix_length參數(shù),你可以指定要忽略的前綴長度,以便更精確地匹配剩余的部分。較大的前綴長度可以提高查詢性能,因為它減少了需要比較的字符數(shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-830508.html

GET /user/_search
{
  "query": {
    "fuzzy": {
      "address": {
        "value": "唄京",
        "fuzziness": 1    
      }
    }
  }
}

到了這里,關(guān)于ElasticSearch級查詢Query DSL上的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • ElasticSearch級查詢Query DSL上

    ElasticSearch級查詢Query DSL上

    目錄 ES高級查詢Query DSL match_all 返回源數(shù)據(jù)_source 返回指定條數(shù)size 分頁查詢fromsize 指定字段排序sort 術(shù)語級別查詢 Term query術(shù)語查詢 Terms Query多術(shù)語查詢 exists query ids query range query范圍查詢 prefix query前綴查詢 wildcard query通配符查詢 fuzzy query模糊查詢 ? ? ? ?ES中提供了一種強大

    2024年02月20日
    瀏覽(28)
  • ElasticSearch Index查詢(Query DSL)

    先貼一個Query DSL的官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html 我平時喜歡查看官方文檔,了解數(shù)據(jù)查詢和存儲方面的性能優(yōu)化點,下面是積累的腳本分享。 查詢語句格式 查詢類型:match_all,match,term,range,fuzzy,bool 等等 查詢條件:查詢條件會根

    2024年02月07日
    瀏覽(23)
  • ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    ES中提供了一種強大的檢索數(shù)據(jù)方式,這種檢索方式稱之為Query DSL(Domain Specified Language 領(lǐng)域?qū)S谜Z言) , Query DSL是利用Rest API傳遞JSON格式的請求體(RequestBody)數(shù)據(jù)與ES進行交互,這種方式的豐富查詢語法讓ES檢索變得更強大,更簡潔。 官方文檔:https://www.elastic.co/guide/en/elasti

    2024年02月07日
    瀏覽(33)
  • 2.ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    2.ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    ES中提供了一種強大的檢索數(shù)據(jù)方式,這種檢索方式稱之為Query DSL (Domain Specified Language 領(lǐng)域?qū)S谜Z言 ) , Query DSL是利用Rest API傳遞JSON格式的請求體(RequestBody)數(shù)據(jù)與ES進行交互,這種方式的豐富查詢語法讓ES檢索變得更強大,更簡潔。 Query DSL | Elasticsearch Guide [7.17] | Elastic 語法

    2024年03月15日
    瀏覽(33)
  • 【ElasticSearch系列-03】ElasticSearch的高級句法查詢Query DSL

    【ElasticSearch系列-03】ElasticSearch的高級句法查詢Query DSL

    ElasticSearch系列整體欄目 內(nèi)容 鏈接地址 【一】ElasticSearch下載和安裝 https://zhenghuisheng.blog.csdn.net/article/details/129260827 【二】ElasticSearch概念和基本操作 https://blog.csdn.net/zhenghuishengq/article/details/134121631 【二】ElasticSearch的高級查詢Query DSL https://blog.csdn.net/zhenghuishengq/article/details/1

    2024年02月06日
    瀏覽(29)
  • 【ES專題】ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    【ES專題】ElasticSearch 高級查詢語法Query DSL實戰(zhàn)

    個人在學(xué)習(xí)的過程中,感覺比較吃力的地方有如下: 語法結(jié)構(gòu)比較陌生 沒有中文文檔, 只能看英文 其他博客也比較少介紹語法結(jié)構(gòu)。比如說,為什么查詢中會出現(xiàn) query 有ES入門基礎(chǔ),且想進一步學(xué)習(xí)ES基本操作的朋友 系列上一篇文章:《【ES專題】ElasticSearch快速入

    2024年02月06日
    瀏覽(24)
  • 微服務(wù)分布式搜索引擎 ElasticSearch 查詢文檔

    微服務(wù)分布式搜索引擎 ElasticSearch 查詢文檔

    本文參考黑馬 分布式Elastic search Elasticsearch是一款非常強大的開源搜索引擎,具備非常多強大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 ElasticSearch 的查詢依然是基于 JSON風(fēng)格的DSL 來實現(xiàn)的。 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)來定義查詢。常見的

    2023年04月15日
    瀏覽(31)
  • 15.Elasticsearch 7.15 Query DSL 之 Wildcard查詢、Regexp查詢

    返回包含與通配符模式匹配的文檔。 以下搜索返回 user.id 字段包含以 ki 開頭并以 y 結(jié)尾的文檔。這些匹配項可以包括 kiy、kity 或 kimchy (必填, 對象) 你想查詢的字段 參數(shù)名 描述 boost (Optional, float) 用于降低或提高查詢相關(guān)性得分的浮點數(shù)。默認為1.0。 rewrite (可選,字符串)

    2023年04月08日
    瀏覽(36)
  • 分布式搜索引擎ElasticSearch的RestClient查詢文檔
  • 【ElasticSearch-基礎(chǔ)篇】ES高級查詢Query DSL全文檢索

    和術(shù)語級別查詢(Term-Level Queries)不同,全文檢索查詢(Full Text Queries)旨在 基于相關(guān)性搜索和匹配文本數(shù)據(jù) 。這些查詢會對輸入的文本進行分析,將其 拆分 為詞項(單個單詞),并執(zhí)行諸如分詞、詞干處理和標準化等操作。 全文檢索的關(guān)鍵特點: 對輸入的文本進行分析

    2024年01月22日
    瀏覽(11)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包