Python 入门

得益于 Python 的灵活性,Elasticsearch 的 Python 客户端使用起来十分方便。

新建项目

这里使用 PyCharm 社区版 ,如果是 Python 程序员推荐订阅个人版。

pycharm start
启动 PyCharm
pycharm new project
新建项目

新建项目,并且选择创建新的虚拟环境。

安装 Poetry

Peotry 是优秀的 Python 项目依赖管理工具,使用 Poetry 保证环境一致。

Linux/Mac 平台,在终端执行:

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

Windows 平台,在 PowerShell 执行:

(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python

在 PyCharm 自带的终端执行下面命令,初始化项目:

 poetry init

然后根据提示输入项目名称、版本、描述等信息。会自动创建 pyproject.toml ,内容如下:

[tool.poetry]
name = "Elasticsearch test"
version = "0.1.0"
description = "测试项目"
authors = ["user <example@mail.com>"]

[tool.poetry.dependencies]
python = "^3.8"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

安装 elasticsearch 库

在 PyCharm 自带的终端执行下面命令:

poetry add elasticsearch
新建文件

在 Pycharm 界面的左边,es 文件夹上右击,选择 New,然后点击 Python file ,创建 main.py

pycharm new python file
新建文件
pycharm new main.py
新建 main.py

编写代码

现在的 main.py 文件是空的。

from elasticsearch import Elasticsearch


def main():
    """"""
    es = Elasticsearch(hosts=[{"host": "localhost", "port": 9200}],
                       http_auth=('elastic', 'password'))
    print(es.ping())


if __name__ == '__main__':
    main()
pycharm new main.py
debug Python

如果在控制台看到输出结构为 true,则表示运行成功。

插入数据

下面的代码默认在 main 函数之中。

es = Elasticsearch(hosts=[{"host": "127.0.0.1", "port": 9200}],
                   http_auth=("elastic", "vf41EwoSzt6dy4z0"))
data = {
    "name": "东方明珠广播电视塔",
    "Description": "东方明珠广播电视塔,位于上海市浦东陆家嘴的未来主义建筑,与外滩隔黄浦江相望,原名上海广播电视塔,上海市民也常简称其为东方明珠。东方明珠由当时华东建筑设计研究院设计,1991年动工,1994年落成,总高468米。在1994年至2007年间,是中国大陆地区的最高建筑,2007年被上海环球金融中心超越。东方明珠自落成以后便成为上海天际线的组成部分之一,是上海的地标性建筑,同时也是中国国家5A级旅游景区。 ",
    "tags": [
        "东方明珠",
        "景点"
    ],
    "location": {
        "lat": 31.239886,
        "lon": 121.499673
    }
}
resp = es.index(index="locale", id=1, body=data)
print(str(resp))

得到返回信息:

{
    "_index":"locale",
    "_type":"_doc",
    "_id":"1",
    "_version":1,
    "result":"created",
    "_shards":{
        "total":2,
        "successful":1,
        "failed":0
    },
    "_seq_no":0,
    "_primary_term":1
}

结果表明,创建了一个索引 locale,ID是 1;版本是 1;结果是 "创建完成";total 的值大于 successful 的值,这个不是表示运行失败,而是表示分片一共有两个,成功创建 1 个分片,这是因为 Elasticsearch 在单节点上运行,主分片没有创建副本,如果在多节点运行 total 和 successful 的值就应该一样。

如果重新运行当前程序,就会发现,版本增加成 2,结果变成 updated ,表示数据更新完成。

另外,由于 type 已经废弃了,不需要制定 type 了,直接使用 _doc 替代。

查询数据
es = Elasticsearch(hosts=[{"host": "127.0.0.1", "port": 9200}],
                   http_auth=("elastic", "vf41EwoSzt6dy4z0"))
resp = es.get(index="locale", id=1)
print(str(resp))

得到返回信息:

{
    "_index":"locale",
    "_type":"_doc",
    "_id":"1",
    "_version":1,
    "_seq_no":0,
    "_primary_term":1,
    "found":True,
    "_source":{
        "name":"东方明珠广播电视塔",
        "Description":"东方明珠广播电视塔,位于上海市浦东陆家嘴的未来主义建筑,与外滩隔黄浦江相望,原名上海广播电视塔,上海市民也常简称其为东方明珠。东方明珠由当时华东建筑设计研究院设计,1991年动工,1994年落成,总高468米。在1994年至2007年间,是中国大陆地区的最高建筑,2007年被上海环球金融中心超越。东方明珠自落成以后便成为上海天际线的组成部分之一,是上海的地标性建筑,同时也是中国国家5A级旅游景区。 ",
        "tags":[
            "东方明珠",
            "景点"
        ],
        "location":{
            "lat":31.239886,
            "lon":121.499673
        }
    }
}

除了插入的数据之外,还获得了索引等信息。

搜索数据
es = Elasticsearch(hosts=[{"host": "127.0.0.1", "port": 9200}],
                   http_auth=("elastic", "vf41EwoSzt6dy4z0"))

resp = es.search(index="locales", params={})
print(str(resp))

得到返回信息:

{
    "took":5,
    "timed_out":false,
    "_shards":{
        "total":1,
        "successful":1,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":{
            "value":1,
            "relation":"eq"
        },
        "max_score":1,
        "hits":[
            {
                "_index":"locales",
                "_type":"_doc",
                "_id":"1",
                "_score":1,
                "_source":{
                    "name":"东方明珠广播电视塔",
                    "Description":"东方明珠广播电视塔,位于上海市浦东陆家嘴的未来主义建筑,与外滩隔黄浦江相望,原名上海广播电视塔,上海市民也常简称其为东方明珠。东方明珠由当时华东建筑设计研究院设计,1991年动工,1994年落成,总高468米。在1994年至2007年间,是中国大陆地区的最高建筑,2007年被上海环球金融中心超越。东方明珠自落成以后便成为上海天际线的组成部分之一,是上海的地标性建筑,同时也是中国国家5A级旅游景区。 ",
                    "tags":[
                        "东方明珠",
                        "景点"
                    ],
                    "location":{
                        "lat":31.239886,
                        "lon":121.499673
                    }
                }
            }
        ]
    }
}
  • took – 消耗的时间,单位是毫秒;
  • timed_out – 是否超时;
  • _shards – 搜索了多少分片,以及多少分片执行成功、失败、或者跳过;
  • max_score – 相关性得分;
  • hits.total.value - 找到多少文件;
  • hits.hits - 查找到的内容。