包名:elasticsearch
下載命令
- 普通版本:
python -m pip install elasticsearch
- 異步版本:
python -m pip install elasticsearch[async]
Elasticsearch():實例化es對象
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
es.indices.create():創建索引
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 創建一個索引為test的索引
es.indices.create(index='test')
es.indices.delete():刪除索引
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 刪除索引為test的索引
es.indices.delete(index='test')
es.index():插入數據
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 在test索引id為1的位置插入一條數據
es.index(index='test',
id=1,
body={
"id":'1',"name":"小明"})
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
doc = {
'name': '方天',
'age': '23'
}
# 在test索引id為2的位置插入一條數據
es.index(index='test', id='2', document=doc)
es.create():插入數據,可以不指定id,create會自動添加id
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
doc = {
'name': '楊晨',
'age': '22'
}
# 在test索引id為3的位置插入一條數據
es.create(index='test',id='3', document=doc)
es.delete():刪除指定數據
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 刪除test索引id為3的數據
es.delete(index='test',id='3',doc_type='_doc')
es.update():更新指定字段
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
doc = {
'name': '李邱俊',
'age': '20'
}
# 將test索引id為2的數據更新為新數據
es.update(index='test',id='2',doc=doc)
es.get():查詢數據
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引id為1的數據
es.get(index='test',id='1')
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引前10條的數據
es.search(index='test')
# 查詢test索引的全部數據
es.search(index='test', query={
'match_all': {
}})
# 查詢test索引中name字段為‘楊晨’的數據
es.search(index='test', query={
'match':{
'name':'楊晨'}})
# 顯示test索引中,從位置1開始查詢的兩條數據
es.search(index='test',size=2,from_=1)
# 顯示test索引中的所有age字段數據
es.search(index='test',filter_path=['hits.hits._source.age'])
es.indices.refresh():刷新索引
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 刷新test索引的數據
es.indices.refresh(index='test')
es.search():按照指定規則查詢
index:要查詢數據的索引
size:查詢所少條數據
from_:從指定索引開始查詢
filter_path:添加過濾路徑,顯示指定字段(默認顯示所有字段信息)
query:要查詢數據的規則
sort:排序查詢
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引前10條數據
print(es.search(index='test'))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 只顯示test索引的age字段信息
print(es.search(index='test',filter_path=['hits.hits._source.age']))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,從序號為1的位置查詢兩條數據
print(es.search(index='test', from_=1, size=2))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,age字段為20的數據
print(es.search(index='test', query={
'match':{
'age':20}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,name字段為楊晨的數據
print(es.search(index='test', query={
'match_phrase':{
'name':'楊晨'}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,age為20的數據
print(es.search(index='test', query={
'term':{
'age':20}}))
# 查詢test索引中,name為楊晨的數據,查詢中文,要在字段後面加上.keyword
print(es.search(index='test', query={
'term':{
'name.keyword':'楊晨'}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,name為楊晨或小明的數據
print(es.search(index='test', query={
'terms':{
'name.keyword':['楊晨','小明']}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,name和about都為小美的數據
print(es.search(index='test',query={
'multi_match':{
'query':'小美',"fields":['name','about']}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,name字段前綴為小的數據
print(es.search(index='test',query={
'prefix':{
'name.keyword':'小'}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,name字段為楊*的數據
print(es.search(index='test',query={
'wildcard':{
'name.keyword':'楊?'}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,name字段為楊*的數據
print(es.search(index='test',query={
'regexp':{
'name.keyword':'楊.'}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,name字段為小美,id字段為1的數據
print(es.search(index='test',query={
'bool':{
'must':{
'term':{
'name':'小美'},'term':{
'id':'1'}}}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,包含age字段的數據
print(es.search(index='test',query={
'exists':{
'field':'age'}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,age字段大於20小於等於23的數據
print(es.search(index='test',query={
'range':{
'age':{
'gt':20,'lte':23}}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中,jsonfield1字段下json數據jsonfield2字段的數據包含'json'的數據
print(es.search(index='test',query={
'nested':{
'path':'jsonfield1','query':{
'term':{
'jsonfield1.jsonfield2':'json'}}}}))
from elasticsearch import Elasticsearch
# 實例化一個ip為localhost,端口為9200,允許超時一小時的es對象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查詢test索引中的數據,按照age字段降序
print(es.search(index='test', sort={
'age.keyword':{
'order':'desc'}}))