ELasticsearchPyhon使用详解

一、安装与环境配置

安装ElasticsearchPyhon库非常简单,我们只需要使用pip命令,即可完成安装:

pip install elasticsearch

注意,此时我们需要建立与Elasticsearch的连接,因此我们需要确保Elasticsearch本身已经被正确地安装并启动。如果你还没有安装,可以在官网http://elastic.co/downloads查看具体安装步骤并完成安装。

为了正确地连接Elasticsearch,请先在Python代码中初始化Elasticsearch对象,代码如下:

from elasticsearch import Elasticsearch

es = Elasticsearch(['localhost'], port=9200)

这里我们默认连接localhost主机的9200端口,如果你的Elasticsearch部署在其他主机或使用其他端口,请在Elasticsearch()方法中相应地修改参数。

二、数据索引与查询

1、创建索引

在Elasticsearch中,数据的基本单位是文档(document),Elasticsearch将文档存储在一个索引(index)中。因此,我们首先需要创建一个索引。

es.indices.create(index='my_index', ignore=400)

我们使用indices.create()方法,将一个名为my_index的索引创建起来。如果索引已经存在,则该方法会返回一个HTTP 400异常,我们在这里忽略该异常。如果你需要更多地了解异常处理,可以参考Elasticsearch官方文档。

2、增、删、改、查

我们使用Elasticsearch来搜寻数据,主要有两个步骤:首先需要在索引中存储数据(增/改),其次可以在索引中查找数据(查)。

我们使用Elasticsearch的index()方法来索引一个文档,方法定义如下:

def index(self, index, body, doc_type=None, id=None, params=None, refresh=None, routing=None, timeout=None, version=None, version_type=None, **kwargs):
    pass

其中,index表示索引名称,doc_type表示文档类型(如果你不指定,Elasticsearch会默认使用_doc类型),body表示文档内容,id为文档ID(如果你不指定,Elasticsearch会自动生成一个),其他参数具体含义可以参考Elasticsearch官方文档。

下面是一个简单的例子,我们索引了一个名为person的文档:

doc = {
    'name': '张三',
    'age': 18,
    'address': '北京市朝阳区'
}
es.index(index='my_index', doc_type='person', body=doc, id=1)

我们使用Elasticsearch的delete()方法来删除一个文档,方法定义如下:

def delete(self, index, doc_type, id, params=None, headers=None):
    pass

其中,index、doc_type、id表示要删除的文档的索引、类型和ID。其他参数具体含义可以参考Elasticsearch官方文档。

下面是一个简单的例子,我们删除了刚才索引的文档(person类型中ID为1的文档):

es.delete(index='my_index', doc_type='person', id=1)

我们使用Elasticsearch的update()方法来更新一个文档,方法定义如下:

def update(self, index, doc_type, id, body=None, params=None, headers=None):
    pass

其中,index、doc_type、id表示要更新的文档的索引、类型和ID,body表示更新后的内容,其他参数具体含义可以参考Elasticsearch官方文档。

下面是一个简单的例子,我们更新了刚才删除的文档(person类型中ID为1的文档):

doc = {
    'name': '李四',
    'age': 20,
    'address': '上海市徐汇区'
}
es.update(index='my_index', doc_type='person', id=1, body={'doc': doc})

我们使用Elasticsearch的search()方法来在索引中查找数据,方法定义如下:

def search(self, index=None, doc_type=None, body=None, params=None, headers=None, preference=None):
    pass

其中,index、doc_type表示要搜索的索引和类型,body表示搜索请求的内容,其他参数具体含义可以参考Elasticsearch官方文档。

下面是一个简单的例子,我们搜索了所有文档:

es.search(index='my_index', body={'query': {'match_all': {}}})

三、数据聚合与分析

1、聚合

Elasticsearch提供了非常强大的文档聚合能力,聚合可以对文档进行分组、计算、筛选等操作,并返回聚合结果。例如,我们要对人员文档进行年龄分布聚合,具体代码如下:

body = {
    "size": 0, 
    "aggs": {
        "age_distribution": {
            "terms": {
                "field": "age",
                "size": 100
            }
        }
    }
}

es.search(index='my_index', body=body)

上面的代码使用Elasticsearch的Aggregations API,对年龄进行聚合,并返回聚合结果。其中,”size”:0表示不需要搜索任何文档;”field”:”age”表示根据年龄字段进行聚合;”size”:100表示返回前100条聚合结果。

2、分析

Elasticsearch提供了非常丰富的分析能力,使用分析模块可以对文档进行分词、过滤、排序、分页等操作,以优化搜索效率。例如,我们要对人员文档进行分页查询,具体代码如下:

body = {
    "from": 0,
    "size": 10,
    "query": {
        "match_all": {}
    }
}

es.search(index='my_index', body=body)

上面的代码使用Elasticsearch的Search API,对人员文档进行了分页查询。其中,”from”:0表示从第0条数据开始查询;”size”:10表示每次查询10条数据;”match_all”:{}表示查询所有文档。

四、性能优化与调优

1、批量操作

Elasticsearch提供了Batch API,可以在一次HTTP请求中完成多个操作,以提高操作效率。例如,我们要批量索引1000条人员文档,具体代码如下:

actions = []
for i in range(1000):
    doc = {
        'name': '张三%d' % i,
        'age': i,
        'address': '北京市朝阳区'
    }
    action = {
        '_index': 'my_index',
        '_type': 'person',
        '_id': i + 1,
        '_source': doc
    }
    actions.append(action)

es.bulk(actions)

上面的代码使用bulk()方法,一次性索引了1000条人员文档。其中,actions为一个列表,每个元素为一个操作;’_index’、’_type’、’_id’表示索引名、类型、ID;’_source’表示文档内容。

2、复合查询

为了提高搜索效率,我们可以使用Elasticsearch的复合查询,将多个查询操作合并为一次优化后的查询。例如,我们要搜索30岁以下的人员文档,具体代码如下:

body = {
    "query": {
        "bool": {
            "must": [
                { "match_all": {} }
            ],
            "filter": [
                { "range": { "age": { "lt": 30 } } }
            ]
        }
    }
}

es.search(index='my_index', body=body)

上面的代码使用bool查询,将must和filter子句合并为一次查询。其中,must表示必须满足的条件,filter表示非关键条件。因为filter不需要打分,所以比must子句更快,可以提高检索效率。

3、分片与副本

Elasticsearch将索引分为多个分片(shard),每个分片可以独立存储、查询数据,提高了系统的性能和容错能力。此外,Elasticsearch还支持在多个节点上复制分片(副本),提高了搜索效率和数据可用性。我们可以在操作时指定索引的分片数和副本数,以自由控制系统性能和容错机制。

es.indices.create(index='my_index', body={
    "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
    }
})

上面的代码在创建索引时,指定了分片数和副本数。

结论

本文主要介绍了ElasticsearchPyhon的使用方法,包括数据索引与查询、数据聚合与分析、性能优化与调优等方面。通过本文的介绍,读者应该可以了解到ElasticsearchPyhon的基本用法,并能够开始使用ElasticsearchPyhon进行实际操作。如果你需要更深入地了解Elasticsearch,可以参考Elasticsearch官方文档。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/157676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-11-18 20:01
下一篇 2024-11-18 20:01

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25

发表回复

登录后才能评论