- Flask開發Web搜索引擎入門與實戰
- 張子憲編著
- 1335字
- 2023-09-08 20:27:31
1.3 Elasticsearch的Python客戶端
首先介紹Elasticsearch的安裝以及Python客戶端的基本使用,然后介紹如何定義索引結構。
1.3.1 安裝Elasticsearch
如果在Windows操作系統下,則可以從https://www.elastic.co/cn/downloads/elasticsearch下載Elasticsearch的安裝包。這里使用的版本為7.8.0。得到文件elasticsearch-7.8.0.zip。
直接解壓至某目錄,例如D:\elasticsearch-7.8.0。下載完解壓后有以下幾個路徑:bin是運行的腳本;config是設置文件;lib中放的是依賴包。到目錄D:\elasticsearch-7.8.0\bin下,運行elasticsearch.bat。
如果顯示Java虛擬機(Java Virtual Machine,JVM)內存不夠,則可以在D:\elasticsearch-7.8.0\config\jvm.options配置文件中調整內存大小。其中,Xms參數表示堆空間的初始大小;Xmx參數表示堆空間的最大大小。應該把最小和最大JVM堆設置成相同的值。例如:
-Xms4g
-Xmx4g
成功啟動Elasticsearch后,在瀏覽器中打開網址:http://localhost:9200/。
啟動成功后,會在解壓目錄下增加2個文件夾:data用于存儲索引數據;logs用于日志記錄。因為創建索引耗時,所以預先將文檔寫入一個日志目錄。
如果使用Linux的Ubuntu發行版,則可以用debian安裝包安裝Elasticsearch;如果使用RedHat Enterprise Linux,則可以使用RPM包安裝Elasticsearch。
在Windows操作系統下,啟動Elasticsearch服務:
> bin\elasticsearch.bat
通過HTTP(Hyper Text Transfer Protocol,超文本傳輸協議)發送指令和Elasticsearch交互。curl是一個知名的網絡命令行工具,可以用來發送GET或者POST命令。在Linux下默認已經安裝了這個命令行工具,可以用curl命令行訪問網址http://localhost:9200/:
> curl http://localhost:9200/
或者在命令行外殼程序PowerShell中運行:
> Invoke-RestMethod http://localhost:9200
在Windows下可以用Python代碼測試Elasticsearch服務:
Kibana是Elasticsearch的開源數據可視化儀表板,可以在Kibana控制臺發送命令給Elasticsearch。在Windows操作系統下,Kibana可以使用.zip軟件包安裝,從https://www.elastic.co/cn/downloads/kibana下載Kibana安裝包。
在編輯器中打開配置文件config/kibana.yml設置Elasticsearch實例:
elasticsearch.hosts: ["http://localhost:9200"]
在Windows操作系統下運行bin\kibana.bat,以啟動Kibana。
在瀏覽器中打開網址http://localhost:5601進入Kibana的管理界面。
如果無法正常訪問,則可以用如下命令檢查端口占用情況。
>netstat -ano | findstr 5601
如果仍然無法正常使用,則可以先測試X-Pack插件或者檢查Elasticsearch中插件的安裝情況。
1.3.2 基本使用
elasticsearch-py(https://github.com/elastic/elasticsearch-py)是Elasticsearch的官方底層Python客戶端。Elasticsearch DSL(https://github.com/elastic/elasticsearch-dsl-py)是高層客戶端。
先介紹elasticsearch-py的使用。使用pip命令安裝elasticsearch模塊:
pip install elasticsearch
定義索引:
簡單的用法如下:
索引和查詢員工的例子:
從指定位置返回結果:
#設置size選項,確定要返回的搜索命中數
test=es.search(index=['test'], size=1000, from_=0)
使用函數enumerate()返回結果:
接下來介紹Elasticsearch DSL的使用。安裝模塊:
pip install elasticsearch-dsl
直接寫成一個dict的典型的搜索請求如下:
這種方法的問題是它非常冗長,容易出現語法錯誤,例如錯誤的嵌套、難以修改(如添加另一個過濾器)。
用Python DSL重寫示例:
用一個簡單的Python類,代表博客系統中的一篇文章:
接下來介紹攝取處理器插件的使用。
首先安裝attachment插件:
#sudo bin/elasticsearch-plugin install ingest-attachment
然后重新啟動Elasticsearch,讓插件生效。
在Python客戶端創建一個管道,然后使用攝取處理器插件attachment,如下所示:
1.3.3 定義索引結構
要將JSON數據傳遞給方法的body參數,用于創建Elasticsearch映射的Python字典,代碼如下:
可以更改分片和副本設置:
index.create()方法的API調用的基本布局如下:
調用該方法時,只有兩個必需的參數:一個是以字符串形式傳遞到索引的索引名稱;另一個是將Python字典傳遞給方法的body參數。但是,有一個選項可以指示Elasticsearch忽略指定的HTTP錯誤代碼。
如果執行得當,Elasticsearch集群應返回一個Python字典。該字典在響應中具有值為“True”的“acknowledged”鍵,如下所示:
評估命令的Python條件語句如下所示:
使用Kibana控制臺或curl請求可以驗證索引及其映射是否已正確創建。
定義索引結構的完整Python代碼如下:
Elasticsearch不會分析Keyword數據類型,這意味著索引的字符串將保持不變。Keyword數據類型可用于聚合列。
與Keyword字段數據類型不同,索引到text類型的字符串在存儲到反向索引中之前將經過分析器處理。默認情況下,Elasticsearch的標準分析器將拆分并小寫化索引的字符串。
- 多媒體CAI課件設計與制作導論(第二版)
- 基于粒計算模型的圖像處理
- Git Version Control Cookbook
- Kibana Essentials
- Java范例大全
- 深入淺出Electron:原理、工程與實踐
- .NET 4.0面向對象編程漫談:基礎篇
- Building Mobile Applications Using Kendo UI Mobile and ASP.NET Web API
- Spring Boot企業級項目開發實戰
- SQL Server 2016數據庫應用與開發
- 軟件測試技術指南
- ExtJS高級程序設計
- Raspberry Pi Home Automation with Arduino(Second Edition)
- 微服務從小白到專家:Spring Cloud和Kubernetes實戰
- 進入IT企業必讀的324個Java面試題