python ES連線伺服器的方法

TechSynapse發表於2024-10-25

連線Elasticsearch(ES)伺服器是進行資料搜尋和分析的常用操作。Elasticsearch是一個基於Lucene的搜尋引擎,提供了RESTful API來進行索引、搜尋和管理資料。

以下是一個詳細的Python程式碼示例,展示如何連線到Elasticsearch伺服器並執行一些基本操作。這個示例使用了官方的elasticsearch-py客戶端庫。

1. 安裝Elasticsearch客戶端庫

首先,你需要安裝elasticsearch庫。如果你還沒有安裝,可以使用pip進行安裝:

bash複製程式碼

pip install elasticsearch

2. 連線到Elasticsearch伺服器

以下是一個完整的Python指令碼,展示瞭如何連線到Elasticsearch伺服器,建立索引,新增文件,並進行搜尋。

from elasticsearch import Elasticsearch, helpers  
  
# 配置Elasticsearch連線  
es = Elasticsearch(  
    ['http://localhost:9200'],  # Elasticsearch伺服器地址和埠  
    http_auth=('username', 'password'),  # 如果需要認證,填寫使用者名稱和密碼  
    use_ssl=False,  # 如果使用HTTPS,設定為True  
    verify_certs=False  # 如果使用HTTPS且自簽名證書,設定為False  
)  
  
# 檢查連線是否成功  
if es.ping():  
    print("Successfully connected to Elasticsearch!")  
else:  
    print("Could not connect to Elasticsearch")  
    exit()  
  
# 建立索引  
index_name = 'my_index'  
if not es.indices.exists(index=index_name):  
    # 定義索引的對映(Schema)  
    mappings = {  
        'properties': {  
            'title': {'type': 'text'},  
            'content': {'type': 'text'},  
            'author': {'type': 'keyword'}  
        }  
    }  
    # 建立索引  
    es.indices.create(index=index_name, body={'mappings': mappings})  
    print(f"Index '{index_name}' created successfully.")  
else:  
    print(f"Index '{index_name}' already exists.")  
  
# 新增文件  
documents = [  
    {"_id": 1, "title": "Elasticsearch Basics", "content": "Learn the basics of Elasticsearch.", "author": "John Doe"},  
    {"_id": 2, "title": "Advanced Elasticsearch", "content": "Go deeper into Elasticsearch features.", "author": "Jane Smith"},  
    {"_id": 3, "title": "Elasticsearch Performance", "content": "Optimize Elasticsearch for performance.", "author": "Alice Johnson"}  
]  
  
# 使用bulk API批次新增文件  
actions = [  
    {  
        "_index": index_name,  
        "_id": doc['_id'],  
        "_source": doc  
    }  
    for doc in documents  
]  
  
helpers.bulk(es, actions)  
print("Documents added successfully.")  
  
# 搜尋文件  
search_body = {  
    "query": {  
        "match": {  
            "content": "Elasticsearch"  
        }  
    }  
}  
  
response = es.search(index=index_name, body=search_body)  
print("Search results:")  
for hit in response['hits']['hits']:  
    print(hit['_source'])  
  
# 清理(可選):刪除索引  
# es.indices.delete(index=index_name)  
# print(f"Index '{index_name}' deleted successfully.")

3.程式碼解釋

  1. 連線配置:
    • Elasticsearch(['http://localhost:9200']):連線到執行在本地主機上的Elasticsearch伺服器,預設埠為9200。
    • http_auth=('username', 'password'):如果Elasticsearch伺服器需要認證,填寫使用者名稱和密碼。
    • use_sslverify_certs:如果連線使用HTTPS,可以啟用這些選項。
  2. 檢查連線:
    • 使用es.ping()方法檢查連線是否成功。
  3. 建立索引:
    • 使用es.indices.exists(index=index_name)檢查索引是否存在。
    • 使用es.indices.create(index=index_name, body={'mappings': mappings})建立索引,並定義文件的對映。
  4. 新增文件:
    • 使用helpers.bulk(es, actions)批次新增文件到索引中。
  5. 搜尋文件:
    • 使用es.search(index=index_name, body=search_body)進行搜尋,並列印搜尋結果。
  6. 清理(可選):
    • 使用es.indices.delete(index=index_name)刪除索引。

4.注意事項

  • 伺服器地址:確保Elasticsearch伺服器正在執行,並且地址和埠配置正確。
  • 認證:如果Elasticsearch伺服器需要認證,確保提供正確的使用者名稱和密碼。
  • SSL:如果連線使用HTTPS,請正確配置use_sslverify_certs選項。

相關文章