Python3使用ElasticSearch

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

Leave a Comment

豫ICP备19001387号-1