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/zh-hant/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

發表回復

登錄後才能評論