目錄
from elasticsearch import elasticsearch
# 建立連線
es = elasticsearch(
hosts=, # 位址
timeout=3600 # 超時時間
)#預設查詢,沒有任何篩選條件,預設顯示前10條資料的所有資訊
es.search(index='test') # index:選擇資料庫
通過指定字段,只顯示資料的指定字段資訊(預設顯示所有欄位的資訊)
#定義過濾字段,最終只顯示此此段資訊
filter_path=['hits.hits._source.ziduan1', # 欄位1
'hits.hits._source.ziduan2'] # 欄位2
es.search(index='test', filter_path=filter_path) # 指定字段:filter_path
通過制定body,進行條件查詢. 類似於mysql中的where.
# body指定查詢條件
body =
# 定義過濾字段,最終只顯示此此段資訊
filter_path=['hits.hits._source.ziduan1', # 欄位1
'hits.hits._source.ziduan2'] # 欄位2
es.search(index='test', filter_path=filter_path, body=body) # 指定查詢條件
body =
},'size': 20 # 不指定預設是10,最大值不超過10000(可以修改,但是同時會增加資料庫壓力)
}# size的另一種指定方法
es.search(index='test', filter_path=filter_path, body=body, size=200) # 指定size,預設是10
body =
}}
注:內容中的下劃線等標點符號會被忽略,有與沒有的效果一樣
只能查詢乙個字段,且只能指定乙個值. 類似於mysql中的 where ziduan='test'
body =
}}
只能查詢乙個字段,但可以同時指定多個值。類似於mysql中的where ziduan in a,b,c...
body =
}}
# 查詢多個欄位中都包含指定內容的資料
body =
}}
body =
}}# 注:英文不需要加keyword
只能查詢單一格式的(都是英文本串,或者都是漢語字串)。兩者混合不能查詢出來。
body =
}}
body =
}}
# must: 各條件之間是and的關係
body = },}]}
}}
# should: 各條件之間是or的關係
body = },}]}
}}
# must_not:各條件都不滿足
body = },}]}
}}
# bool巢狀bool
# ziduan1、ziduan2條件必須滿足的前提下,ziduan3、ziduan4滿足乙個即可
body = }, # 多個條件並列 ,注意:must後面是[{}, {}],裡面的每個條件外面有個{}
},},}]
}}]}}
}
body = # 查詢存在ziduan1的資料
}}# exists、bool巢狀查詢
# 存在ziduan1的情況下,ziduan2的值必須為指定字段
body = },},]
}}
}
body = }}
}
body = # 根據ziduan1裡面的ziduan2資料查詢}}
}}# nest、bool巢狀查詢
body = },
# 根據ziduan1裡面的ziduan2資料查詢}}}
]}
}}
body =
},"sort":
}}# 多欄位排序,注意順序!寫在前面的優先排序
body =
},"sort":[},
}],}
資料量小可以使用此方法,資料量大推薦使用search_after方法
body=},
'sort': , # 翻頁需要先使用sort排序,與search_after類似
}# size:設定一頁資料量
result = es.search(index='pv91', scroll='1m', size=5, body=body)
# 獲取總的資料量,用於得到總的資料頁數
total = result['hits']['total']
# 獲取初始翻頁id
scrid = result['_scroll_id']
# 第一頁的資料
result = es.search(index='test',size=5, body=body, filter_path=['hits.hits._source.ziduan1', 'hits.hits._source.ziduan2.ziduan2_1'])
# 開始翻頁
for i in range(5): #翻5頁
print(result, '\n')
print('*' * 50, '第{}頁'.format(i), '*' * 50)
result = es.scroll(scroll_id=scrid, scroll='1m', filter_path=['hits.hits._source.ziduan1', 'hits.hits._source.ziduan2.ziduan2_1'])
推薦此方法
content_size = 3000 # 設定一頁的資料量
size_cont = content_size
next_id = 0 # 初始化next_id,每次迴圈是從 此資料 之後的第1個資料開始
while size_cont == content_size:
body = }},
'sort': , # 以ziduan2為next_id,需要先對其進行排序
'search_after': [next_id], # 從此資料之後的第1個資料開始,但不包含此資料
'size': content_size # 指定當前頁資料量
}filter_path = [
'hits.hits._source.ziduan1',
'hits.hits._source.ziduan2'
]rt = es.search(index='pv1', body=body, filter_path=filter_path)['hits']['hits']
size_cont = len(rt) # 更新迴圈條件:若資料量不等於指定的資料量,說明遍歷到最後的一頁資料了
for result in rt:
try:
except:
continue
try:
ziduan2 = result['_source']['ziduan2']
next_id = ziduan2 # 更新next_id
except:
# 統計符合條件的指定欄位的資料中,各資料的個數
body =
# },
'size': 0, # 設定0為條件查詢後的資料顯示條數,預設顯示10條
'aggs':}},
}# 巢狀聚合:根據聚合後的資料大小再進行聚合
body = , # 選擇ziduan1裡面的資料量再進行聚合
"aggs": }},
},},
}# 去重統計
body = ,},}
}# 結果返回值說明
"""doc_count_error_upper_bound: 表示沒有在這次聚合中返回、但是可能存在的潛在聚合結果
sum_other_doc_count:表示這次聚合中沒有統計到的文件數
buckets:聚合結果,預設由高到低排列。key表示聚合元素的值,doc_count表示元素出現的次數。注意,這裡的doc_count也是不準確的
"""
mysql 常用查詢語句
1 在原有的時間欄位上做加減 1 減幾天date sub update bg outpatient test set test time date sub test time,interval 30 day where test time sysdate 2 加幾天adddate update bg...
MySql常用查詢語句
根據字段進行查詢 select nickname from os user where nickname biubiubiu 查詢os user account表中金額由大到小排名前三的使用者的所有資訊 select from os user account order by balance des...
oracle常用查詢語句
1 檢視oracle表空間的使用情況直接使用情況 2 檢視oracle連線數 select count from v session 連線數 select count from v session where status active 併發連線數 alter system set processe...