日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

elasticsearch7常见查询(term、match、bool、filter)

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 elasticsearch7常见查询(term、match、bool、filter) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、精準查詢term
term是代表完全匹配,即不進行分詞器分析,文檔中必須包含整個搜索的詞匯

1、term單值
字段只有一個值時候,用term關鍵詞查詢

查詢biz_id值為1909190023901225的記錄

curl -XGET http://192.168.1.73:9200/xyerp/order/_search -H 'Content-Type: application/json' -d '
{
?"query": {
???? "term": {
?????? "biz_id": "1909190023901225"
????? }
?}
}
進一步優化查詢,因為是精準查詢,不需要查詢進行評分計算,只希望對文檔進行包括或排除的計算,所以我們會使用 constant_score 查詢以非評分模式來執行 term 查詢并以一作為統一評分。推薦如下查詢

{ ?
??? "query" : { ?
??????? "constant_score" : { ?
???????????? "filter" : { ?
??????????????? "term" : { ?
??????????????????? "biz_id" : "1909190023901225" ?
??????????????? } ?
??????????? } ?
??????? } ?
??? } ?
}'
2、terms多值
字段有一多個值時候,用terms關鍵詞查詢,后跟數組

{
??? "query":{
??????? "terms":{
??????????? "biz_id":["1909190023901225"]
??????? }
??? }
}'
?constant_score 以非評分模式查詢,推薦如下查詢

{ ?
??? "query" : { ?
??????? "constant_score" : { ?
???????????? "filter" : { ?
??????????????? "terms" : { ?
??????????????????? "biz_id" : ["1909190023901225","e1909190111365113"] ?
??????????????? } ?
??????????? } ?
??????? } ?
??? } ?
}'
3、term多個字段
{
?? ?"query": [{
?? ??? ?"term": {
?? ??? ??? ?"biz_id": "1909190023901225"
?? ??? ?}
?? ?}, {
?? ??? ?"term": {
?? ??? ??? ?"name": "zhangsan"
?? ??? ?}
?? ?}]
}
?二、匹配查詢match
match和term的區別是 ,match查詢的時候,elasticsearch會根據你給定的字段提供合適的分析器,而term查詢不會有分析器分析的過程,match查詢相當于模糊匹配,只包含其中一部分關鍵詞就行

match 是模糊查詢,而term 是 精確匹配查詢;

1、match
進行full text search或者exact value(非string字段或not_analyzed的字段),進行匹配

查詢字段merchant_id為2501的值,并按時間倒序

{
?? "query": {
???? "match": {
?????? "merchant_id": "2501"
???? }
?? },
?? "sort": [
???? {
?????? "trade_finished_time": {
???????? "order": "desc"
?????? }
???? }
?? ]
}'
2、match_all
{?"match_all":?{}} 匹配所有的, 當不給查詢條件時,默認全查。

{
?? ?"query": {
?? ??? ?"match_all": {}
?? ?}
}
3、multi_match
同時對查詢的關鍵詞,多個字段同時進行匹配,即多個字段是AND的關系

{
??? "query":{
??????? "multi_match":{
??????????? "query":"2501",
??????????? "fields":["merchant_id","_id"]
??????? }
??? }
}
?同時field還支持更為豐富的查詢

在在fields中,按brandName(品牌名)、sortName(分類名)、productName(商品名)productKeyword(商品關鍵字),搜索“牛仔 彈力”關鍵詞,brandName源值、拼音值、關鍵字值都是100分,sortName源值、拼音值80分,productName源值60分,productKeyword值20分,分值由高到低優先級搜索

{
? "query": {
??? "multi_match": {
????? "query": "牛仔 彈力",
????? "fields": [
??????? "brandName^100",
??????? "brandName.brandName_pinyin^100",
??????? "brandName.brandName_keyword^100",
??????? "sortName^80",
??????? "sortName.sortName_pinyin^80",
??????? "productName^60",
??????? "productKeyword^20"
????? ],
????? "type": <multi-match-type>,
????? "operator": "AND"
??? }
? }
}
4、match_phrase
?match_phrase查詢分析文本,并從分析文本中創建短語查詢。
類似 match 查詢,?match_phrase 查詢首先將查詢字符串解析成一個詞項列表,然后對這些詞項進行搜索,但只保留那些包含 全部 搜索詞項,且 位置與搜索詞項相同的文檔

如下,查詢?quick brown、quick brown fox、 brown fox可以查詢到,quick fox 查詢不到

{ ?
????? "query": { ?
????????? "match_phrase": { ?
????????????? "title": "quick brown fox" ?
????????? } ?
????? } ?
} ?
?如下,?查詢 a,b,啊和b之間隔3個字符可以查詢到,隔不是3個查詢不到

{
??? "query":{
??????? "match_phrase" :{
??????????? "query":"a,b",
??????????? "slop":3
??????? }
??? }
}
三、bool查詢
bool查詢包含四種操作符,分別是must,should,must_not,query。它們均是一種數組,數組里面是對應的判斷條件

must: 必須匹配,與and等價。貢獻算分

must_not:必須不匹配,與not等價,常過濾子句用,但不貢獻算分

should: 選擇性匹配,至少滿足一條,與 OR 等價。貢獻算分

filter: 過濾子句,必須匹配,但不貢獻算分

{ ?
??? "query" : { ?
??????? "filtered" : { ?
??????????? "filter" : { ?
??????????????? "bool" : { ?
??????????????????? "should" : [ ?
??????????????????????? { "term" : {"merchant_id" : 100}}, ?
??????????????????????? { "term" : {"pay_type" : "3"}} ?
??????????????????? ], ?
??????????????????? "must_not" : { ?
??????????????????????? "term" : {"trade_type" : "2"} ?
??????????????????? } ?
??????????????? } ?
??????????? } ?
??????? } ?
??? } ?
}'
?四、filter查詢
過濾器,會查詢對結果進行緩存,不會計算相關度,避免計算分值,執行速度非常快。

如下, 查詢出status為active的狀態

{
? "query": {
??? "bool": {
????? "filter": {
??????? "term": {
????????? "status": "active"
??????? }
????? }
??? }
? }
}
filter也常和range范圍查詢一起結合使用,range范圍可供組合的選項

gt : 大于

lt : 小于

gte : 大于等于

lte :小于等于

如下,查詢merchant_id值為2501下的交易數據

{
? "query": {
??? "bool": {
????? "must": {
??????? "term": {
????????? "merchant_id": "2501"
??????? }
????? },
????? "filter": {
??????? "range": {
????????? "trade_finished_time": {
??????????? "from": "2019-09-01T00:00:00",
??????????? "to": "2019-09-30T23:59:59"
????????? }
??????? }
????? }
??? }
? }
}
如下查詢,must下匹配,filter進行過濾,range定義范圍

{?? ?
??? "query": {?? ?
??????? "bool": {?? ?
??????????? "must": [?? ?
??????????????? {? ?
??????????????????? "match": {? ?
??????????????????????? "title": "Search"? ?
??????????????????????? } ?
??????????????? }, ?
??????????????? {? ?
??????????????????? "match": {? ?
??????????????????? "content": "Elasticsearch"? ?
??????????????????? } ?
??????????????? } ?
??????????? ],?? ?
??????????? "filter": [ ?
??????????????? {? ?
??????????????????? "term": {? ?
??????????????????????? "status": "1"? ?
??????????????????????? } ?
??????????????? }, ?
??????????????? {? ?
??????????????????? "range": {? ?
??????????????????????? "publish_date": {? ?
??????????????????????? "gte": "2015-01-01"? ?
??????????????????????? } ?
??????????????????? } ?
??????????????? } ?
??????????? ] ?
??????? } ?
???? } ?
} ?
五、常見查詢場景
1、查詢商戶ID為3582,訂單號為360102199003072618,按時間范圍過濾,按下單時間倒序,每次查詢100條

{
?? ?"query": {
?? ??? ?"bool": {
?? ??? ??? ?"must": [{
?? ??? ??? ??? ?"term": {
?? ??? ??? ??? ??? ?"merchant_id": "3582"
?? ??? ??? ??? ?}
?? ??? ??? ?}, {
?? ??? ??? ??? ?"term": {
?? ??? ??? ??? ??? ?"order_num": "360102199003072618"
?? ??? ??? ??? ?}
?? ??? ??? ?}],
?? ??? ??? ?"filter": [{
?? ??? ??? ??? ?"range": {
?? ??? ??? ??? ??? ?"order_time": {
?? ??? ??? ??? ??? ??? ?"from": "2019-11-01T17:00:00+08:00",
?? ??? ??? ??? ??? ??? ?"to": "2019-11-01T20:00:00+08:00"
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}]
?? ??? ?}
?? ?},
?? ?"size": 100,
?? ?"sort": [{
?? ??? ?"order_time": "desc"
?? ?}]
}
?
————————————————
版權聲明:本文為CSDN博主「LiryZlian」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lzxlfly/article/details/102771175

總結

以上是生活随笔為你收集整理的elasticsearch7常见查询(term、match、bool、filter)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。