Python3下使用ElasticSearch是非常方便的。
安装依赖
pip3 install elasticsearch[async]
示例代码
from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch(['http://user:password@172.17.0.2:9200'])
doc = {
'author': 'Rhonin',
'text': '这是一个测试',
'timestamp': datetime.now(),
}
res = es.index(index="test-index", id=1, body=doc)
print(res['result'])
res = es.get(index="test-index", id=1)
print(res['_source'])
es.indices.refresh(index="test-index")
res = es.search(index="test-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res['hits']['total']['value'])
for hit in res['hits']['hits']:
print("%(timestamp)s %(author)s: %(text)s" % hit["_source"])
Elasticsearch
函数里的是连接地址。
输出如下
updated
{'author': 'Rhonin', 'text': '这是一个测试', 'timestamp': '2021-09-13T02:59:10.856817'}
Got 1 Hits:
2021-09-13T02:59:10.856817 Rhonin: 这是一个测试
问题
elasticsearch.exceptions.NotFoundError: NotFoundError
出现这个异常的原因可能有两个,一是index
不存在,二是通过id
查找或删除时id
不存在。
对于第一个异常,需要首先索引一个文档以建立index
.方法如下
res = es.index(index="test-index", id=1, body=doc)
对于第二个异常,由于所操作的id
并不总是存在的,所以需要处理这种异常,该方法同样适用于第一个异常。
from elasticsearch import Elasticsearch, exceptions
es = Elasticsearch()
try:
res = res = es.get(index="test-index", id=1)
except exceptions.NotFoundError:
pass