連線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.程式碼解釋
- 連線配置:
Elasticsearch(['http://localhost:9200'])
:連線到執行在本地主機上的Elasticsearch伺服器,預設埠為9200。http_auth=('username', 'password')
:如果Elasticsearch伺服器需要認證,填寫使用者名稱和密碼。use_ssl
和verify_certs
:如果連線使用HTTPS,可以啟用這些選項。
- 檢查連線:
- 使用
es.ping()
方法檢查連線是否成功。
- 使用
- 建立索引:
- 使用
es.indices.exists(index=index_name)
檢查索引是否存在。 - 使用
es.indices.create(index=index_name, body={'mappings': mappings})
建立索引,並定義文件的對映。
- 使用
- 新增文件:
- 使用
helpers.bulk(es, actions)
批次新增文件到索引中。
- 使用
- 搜尋文件:
- 使用
es.search(index=index_name, body=search_body)
進行搜尋,並列印搜尋結果。
- 使用
- 清理(可選):
- 使用
es.indices.delete(index=index_name)
刪除索引。
- 使用
4.注意事項
- 伺服器地址:確保Elasticsearch伺服器正在執行,並且地址和埠配置正確。
- 認證:如果Elasticsearch伺服器需要認證,確保提供正確的使用者名稱和密碼。
- SSL:如果連線使用HTTPS,請正確配置
use_ssl
和verify_certs
選項。