python3 elasticsearch 先看下面我給准備的干貨,如果不能滿足,pls
官網文檔 :https://pypi.org/project/elasticsearch/
dev 文檔: https://elasticsearch-py.readthedocs.io/en/v7.15.1/
開發API官網 例子: https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/examples.html
update delete documnt 見文章最后
1依賴: python3.7
pip3 install elasticsearch==7.9.1
1、連接ES,創建索引
from elasticsearch import Elasticsearch es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) index_name = 'my_index' request_body = { 'mappings': { 'properties': { 'name': { 'type': 'text' }, 'id': { 'type': 'integer' }, } } } # 創建索引 es.indices.create(index=index_name, body=request_body)
2、判斷索引是否存在
為防止在創建索引的時候出現重復,產生錯誤,在創建之前最好判斷一下索引是否存在
from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) # 索引存在,先刪除索引 if es.indices.exists(index_name): es.indices.delete(index=index_name) else: print('索引不存在,可以創建') # 創建索引 es.indices.create(index=index_name, body=request_body) # 查看索引的信息 print(es.info())
也可以訪問 :localhost:9200/_cat/indices?v 查看所有的索引
3、刪除索引
刪除指定地址的ES服務的索引
from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) es.indices.delete(index=index_name)
4、索引增加數據
from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) request_body = { 'mappings': { 'properties': { 'name': { 'type': 'text' }, 'id': { 'type': 'integer' }, } } } # 索引存在,先刪除索引 if es.indices.exists(index_name): es.indices.delete(index=index_name) else: print('索引不存在,可以創建') # 創建索引 es.indices.create(index=index_name, body=request_body) es.index(index=index_name, id='1', body={ 'name': '法外狂徒-張三', 'id': 1, } ) es.index(index=index_name, id='2', body={ 'name': '普法教育-李四', 'id': 2, } )
5、獲取數據
from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) # 查詢數據包含兩種 get search # get 查詢數據 res = es.get(index=index_name, id='1') # 我用的是es7,doc_type 可以不傳,也可以查詢到 # search 查詢數據 # 查詢所有商品數據 match_all body = { 'query': { 'match_all': {} }, 'from': page * page_size, # 從第幾條數據開始 'size': page_size # 獲取多少條數據 } requ_data = es.search(index=index_name, body=body) # 精確查找 term 查詢name='法外狂徒-張三'的所有數據 body = { 'query': { 'term': { 'name': '法外狂徒-張三' } }, } # 精確查找 terms body = { 'query': { 'terms': [ '法外狂徒-張三', '普法教育-李四' ] }, } # match: 匹配name包含 ‘法外狂徒-張三’的所有數據 body = { 'query': { 'match': [ 'name': '法外狂徒-張三' ] }, } # 查詢id和name包含 法外狂徒-張三 body = { 'query': { 'multi_match': [ 'query': '法外狂徒-張三', 'fields': ['name', 'id'] ] }, } # 搜索出id為1或者2的所有數據 body = { 'query': { 'ids': [ 'type': 'test_type', 'values': ['1', '2'] ] }, }
6、復合查詢bool
# 符合查詢bool # bool有3類查詢關系,must(都滿足),should(其中一個滿足),must_not(都不滿足) from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) body = { 'query': { 'bool': { 'must': [ { 'term': { 'name': '法外狂徒-張三' } }, { 'term': { 'id': 1 } } ] } } } # 查詢name=‘法外狂徒-張三’並且id=1的數據 es.search(index=index_name, body=body)
7、切片式查詢
# 切片式查詢 from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) body = { 'query': { 'match_all': {} }, 'from': 2, # 從第二條數據開始 'size': 4 # 獲取4條數據 } # 從第2條數據開始,獲取4條數據 es.search(index=index_name, body=body)
8、范圍查詢
# 范圍查詢 from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) body = { 'query': { 'range': { 'id': { 'gte': 1, # >=1 'lte': 5, # <=5 } } }, } # 查詢1<=id<=5的所有數據 # gte 和 lte 也可以換成換成 from 和 to es.search(index=index_name, body=body)
9、前綴查詢
# 前綴查詢 from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) body = { 'query': { 'prefix': { 'name': '法' } }, } # 查詢前綴為 ‘法’的所有數據 es.search(index=index_name, body=body)
10、通配符查詢
# 通配符查詢 from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) body = { 'query': { 'wildcard': { 'name': '*三' } }, } # 查詢所有以 ‘三’結尾的數據 es.search(index=index_name, body=body)
11、查詢的數據排序
# 排序查詢 from elasticsearch import Elasticsearch index_name = 'my_index' es = Elasticsearch( ['127.0.0.1:9200'], # 在做任何操作之前,先進行嗅探 # sniff_on_start=True, # # 節點沒有響應時,進行刷新,重新連接 sniff_on_connection_fail=True, # # 每 60 秒刷新一次 sniffer_timeout=60 ) body = { 'query': { 'match_all': {} }, 'sort': { 'id': { # 根據id字段升序排序 'order': 'asc' # asc 升序, desc 降序 } } } # 查處所有數據並按照id大小排序 es.search(index=index_name, body=body)
11. update documnt: update:https://www.elastic.co/guide/en/elasticsearch/reference/7.15/search-search.html
To update a document, you need to specify three pieces of information: index
, id
, and a body
:
from datetime import datetime from elasticsearch import Elasticsearch es = Elasticsearch() doc = { 'author': 'author_name', 'text': 'Interesting modified content...', 'timestamp': datetime.now(), } res = es.update(index="test-index", id=1, body=doc) print(res['result'])
12 Deleting a document
You can delete a document by specifying its index
, and id
in the delete()
method:
es.delete(index="test-index", id=1)
原文:https://blog.csdn.net/weixin_41979456/article/details/111932972