广告位联系
返回顶部
分享到

Python连接和操作Elasticsearch

python 来源:互联网 作者:佚名 发布时间:2024-12-10 23:05:32 人浏览
摘要

一、服务器端配置 在开始之前,确保你的 Elasticsearch 服务已经在服务器上正确安装和配置。 以下是一些基本的配置步骤: 1. 修改 Elasticsearch 配置文件 找到 Elasticsearch 的配置文件elasticsearch.y

一、服务器端配置

在开始之前,确保你的 Elasticsearch 服务已经在服务器上正确安装和配置。

ES

以下是一些基本的配置步骤:

1. 修改 Elasticsearch 配置文件

找到 Elasticsearch 的配置文件 elasticsearch.yml,并进行如下修改,以允许远程访问:

1

2

3

network.host: 0.0.0.0

http.port: 9200

discovery.type: single-node

2. 开放防火墙端口

确保服务器的防火墙已经开放了 Elasticsearch 的默认端口 9200。如果你使用的是云服务器,也需要在安全组中开放该端口。

你可以通过在浏览器中输入 http://<你的服务器IP>:9200 来测试是否能够正常访问 Elasticsearch。如果配置正确,你应该能看到如下 Elasticsearch 的欢迎页面。

欢迎页面

二、本地 Python 连接 Elasticsearch

在确保服务器端配置无误后,接下来我们在本地使用 Python 连接到 Elasticsearch。首先,你需要安装 elasticsearch Python 客户端库:

1

pip install elasticsearch

1. 连接 Elasticsearch

以下是连接到 Elasticsearch 的示例代码:

1

2

3

4

5

6

7

8

9

10

from elasticsearch import Elasticsearch

 

# 连接到 Elasticsearch,替换为实际的 IP 地址和密码

es = Elasticsearch('http://192.168.111.199:9200', basic_auth=('elastic', 'Elastic_j625sz'))

 

# 检查连接

if es.ping():

    print('连接成功')

else:

    print('连接失败')

在上述代码中,basic_auth 参数用于传递用户名和密码。如果你的 Elasticsearch 没有设置密码,可以省略该参数。

image-kkdu.png

2. 索引操作

1

2

3

4

5

6

7

8

# 创建索引 

es.indices.create(index="my_index") 

 

# 删除索引 

es.indices.delete(index="my_index") 

 

# 检查索引是否存在 

es.indices.exists(index="my_index")

索引操作

3. 文档操作

连接成功后,我们可以开始进行数据存储和搜索操作。以下是一个创建索引并插入数据的示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

# 添加文档

doc1 = {

    "title": "测试文档1",

    "content": "这是一个测试文档1",

    "timestamp": "2024-12-07"

}

doc2 = {

    "title": "测试文档2",

    "content": "这是一个测试文档2",

    "timestamp": "2024-12-01"

}

# 指定ID插入

es.index(index="my_index", id="1", document=doc1)

# 自动生成ID插入

es.index(index="my_index", document=doc2)

 

# 获取文档

result = es.get(index="my_index", id="1")

print(result)

 

# 更新文档

update_doc = {

    "doc": {

        "title": "更新后的标题"

    }

}

es.update(index="my_index", id="1", body=update_doc)

print(es.get(index="my_index", id="1"))

 

# 删除文档

es.delete(index="my_index", id="1")

文档操作

4. 搜索内容

接下来,我们可以通过搜索来查找我们存储的数据。

在这之前,定义一个打印文档的方法:

1

2

3

4

5

6

def print_doc(result):

    for hit in result['hits']['hits']:

        print(f"文档ID: {hit['_id']}")

        print(f"得分: {hit['_score']}")

        print(f"文档内容: {json.dumps(hit['_source'], indent=2, ensure_ascii=False)}")

        print("-" * 50)

下面是常用的搜索方式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

# 简单搜索

query = {

    "query": {

        "match": {

            "title": "测试"

        }

    }

}

result = es.search(index="my_index", body=query)

print_doc(result)

 

# 复杂搜索(bool查询)

query = {

    "query": {

        "bool": {

            "must": [

                {"match": {"title": "测试"}},

                {"range": {"timestamp": {"gte": "2024-01-01"}}}

            ]

        }

    }

}

result = es.search(index="my_index", body=query)

print_doc(result)

 

# 分页查询

query = {

    "query": {"match_all": {}},

    "from": 0,  # 从第几条开始

    "size": 10  # 返回多少条

}

result = es.search(index="my_index", body=query)

print_doc(result)

在这个示例中,我们搜索了包含“测试”这个词的文档,并打印出搜索结果。

搜索内容

5. 聚合查询

1

2

3

4

5

6

7

8

9

10

11

12

# 聚合查询示例 

query = { 

    "aggs": { 

        "popular_titles": { 

            "terms": { 

                "field": "title.keyword", 

                "size": 10 

            } 

        } 

    } 

result = es.search(index="my_index", body=query)

聚合查询

6. 批量操作

1

2

3

4

5

6

7

# 批量插入 

actions = [ 

    {"_index": "my_index", "_source": {"title": "文档1"}}, 

    {"_index": "my_index", "_source": {"title": "文档2"}}, 

from elasticsearch.helpers import bulk 

bulk(es, actions)

批量操作

三、注意事项

在使用 Elasticsearch 时,有几个注意事项需要牢记:

  1. 确保 Elasticsearch 服务正在运行:在进行任何操作之前,确保 Elasticsearch 服务已经启动。
  2. 检查网络连接:确保本地机器与服务器之间的网络连接畅通。
  3. 认证信息:如果 Elasticsearch 配置了认证,连接时必须提供正确的用户名和密码。
  4. 安全措施:在生产环境中,建议配置合适的安全措施,例如使用 HTTPS 和防火墙规则。
  5. 记得在完成操作后关闭连接:es.close()

四、故障排除

如果在连接或操作 Elasticsearch 时遇到问题,可以尝试以下方法进行排查:

  • 使用 telnet 测试端口连通性:

1

telnet <你的服务器IP> 9200

  • 检查 Elasticsearch 的日志文件,查看是否有错误信息。
  • 确认 elasticsearch.yml 配置文件中的设置是否正确,并重启 Elasticsearch 服务以应用更改。

结论

通过以上步骤,你应该能够成功使用 Python 连接到 Elasticsearch,并进行基本的文档存储和搜索操作。Elasticsearch 提供了强大的搜索能力,结合 Python 的灵活性,可以帮助你构建高效的数据检索系统。希望这篇文章能帮助你更好地理解如何使用 Python 操作 Elasticsearch。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Python中的下划线“_”们介绍
    随便拿一份Python代码,几乎都可以看到很多_的身影。 在Python中,下划线(_)有多种用途和含义,具体取决于它们的位置和使用方式。在这
  • OpenCV-Python给图像去除水印多种方法
    去除水印的过程与添加水印相反,它涉及到图像修复、颜色匹配和区域填充等技术。OpenCV-Python 提供了多种方法来处理不同类型的水印,包括
  • Python连接和操作Elasticsearch

    Python连接和操作Elasticsearch
    一、服务器端配置 在开始之前,确保你的 Elasticsearch 服务已经在服务器上正确安装和配置。 以下是一些基本的配置步骤: 1. 修改 Elasticse
  • Python ArcPy实现栅格图像文件由HDF格式批量转换为

    Python ArcPy实现栅格图像文件由HDF格式批量转换为
    首先,来看看我们想要实现的需求。 在一个名为HDF的文件夹下,有五个子文件夹;每一个子文件夹中,都存储了大量的.hdf格式的栅格遥感影
  • python随机种子ranrandom seed的使用介绍
    在Python中启用随机种子(random seed)是为了确保你的随机数生成过程是可重复的。通过设置随机种子,你可以保证每次运行代码时生成的随机
  • Numpy判断数组是否全0的三种方法

    Numpy判断数组是否全0的三种方法
    1numpy.any() numpy.any()函数用于检查一个numpy数字是否存在任何一个非0元素,因此将numpy.any()的结果取反即得numpy数组是否全0的结果。例如: 1
  • python实现字符串逆序输出的几种方法
    方法一:使用切片(Slicing) 1 2 3 4 5 6 def reverse_string(s): return s[::-1] s=str(input(请输入字符串:)) reversed_string=reverse_string(s) print(reversed_string) 在
  • python删除目录的三种方法介绍
    一、os.rmdir(path) 删除目录 path,path必须是个空目录,否则抛出OSError异常。 二、os.removedirs(path) 递归地删除目录。要求每一级目录都为空,才
  • Python内置模块UUID的具体使用介绍
    uuid模块是Python标准库的一部分,它提供了一种生成通用唯一识别码(Universally Unique Identifier,简称UUID)的方法,UUID是一种标识符标准,其目的
  • Python中find()的用法小结
    1 2 3 s = Hello Word! a = o print ( 字符o在字符串中的索引为: ,s.find(a)) #输出结果为字符o在字符串中的索引为: 4 1 2 3 4 5 s = Hello Word! a = o print (
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计