0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Python中進(jìn)行Elasticsearch操作?

馬哥Linux運(yùn)維 ? 來(lái)源:未知 ? 作者:工程師郭婷 ? 2018-07-20 11:12 ? 次閱讀

什么是ElasticSearch?

ElasticSearch(ES)是一個(gè)建立在Apache Lucene之上的高度可用的分布式開源搜索引擎。它基于Java構(gòu)建的,因此可用于許多平臺(tái)。數(shù)據(jù)以JSON格式非結(jié)構(gòu)化存儲(chǔ),這也使其成為一種NoSQL數(shù)據(jù)庫(kù)。與其他NoSQL數(shù)據(jù)庫(kù)不同,ES還提供搜索引擎功能和其他相關(guān)功能。

ElasticSearch用例

ES可用于多種目的,下面給出了其中的幾個(gè):

你運(yùn)營(yíng)著提供大量動(dòng)態(tài)內(nèi)容的網(wǎng)站,比如電子商務(wù)網(wǎng)站或者博客。通過(guò)實(shí)施ES,你不僅可以為Web應(yīng)用程序提供強(qiáng)大的搜索引擎,還可以在應(yīng)用程序中提供原生自動(dòng)補(bǔ)全功能。

你可以獲取不同類型的日志數(shù)據(jù),然后可以使用它來(lái)查找趨勢(shì)和統(tǒng)計(jì)信息。

設(shè)置和運(yùn)行

安裝ElasticSearch最簡(jiǎn)單的方法就是下載并運(yùn)行可執(zhí)行文件。必須確保使用的是Java 7或更高版本。

下載后解壓縮并運(yùn)行它的二進(jìn)制文件。

如何在Python中進(jìn)行Elasticsearch操作?

滾動(dòng)窗口中會(huì)出現(xiàn)很多文字。如果你看到像下面這樣的,那么它應(yīng)該是完成了。

如何在Python中進(jìn)行Elasticsearch操作?

但是,由于眼見為實(shí),通過(guò)cURL 查看類似于這樣的歡迎界面以便你知道確實(shí)成功安裝了:

如何在Python中進(jìn)行Elasticsearch操作?

在我開始訪問(wèn)Python中的Elastic Search之前,我們來(lái)做一些基本的東西。 正如我提到ES提供了一個(gè)REST API接口,我們將使用它來(lái)執(zhí)行不同的任務(wù)。

基本示例

你要做的第一件事就是創(chuàng)建索引。一切都以索引形式存儲(chǔ)。RDBMS概念中索引相當(dāng)于一個(gè)數(shù)據(jù)庫(kù),因此不要將它與你在RDBMS中學(xué)習(xí)的典型索引概念混淆。使用PostMan來(lái)運(yùn)行REST API。

如何在Python中進(jìn)行Elasticsearch操作?

如果它成功運(yùn)行,你會(huì)看到如下所示的回應(yīng):

如何在Python中進(jìn)行Elasticsearch操作?

所以我們使用company為名創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)。換句話說(shuō),我們創(chuàng)建了一個(gè)名為“company”的索引。你將看到如下所示的內(nèi)容:

如何在Python中進(jìn)行Elasticsearch操作?

暫時(shí)不用管mappings是什么,我們會(huì)在后面討論它。它實(shí)際上做的只是創(chuàng)建一個(gè)你自己的Schema文檔。creation_date是不言自明的。number_of_shards表示將保留此索引數(shù)據(jù)的分區(qū)數(shù)量。將整個(gè)數(shù)據(jù)保存在單個(gè)磁盤上毫無(wú)意義。如果你運(yùn)行的是多個(gè)Elastic節(jié)點(diǎn)的集群,那么整個(gè)數(shù)據(jù)都會(huì)被分割。簡(jiǎn)而言之,如果有5個(gè)分片,則整個(gè)數(shù)據(jù)可以在5個(gè)分片中使用,并且ElasticSearch集群可以服務(wù)來(lái)自其任何節(jié)點(diǎn)的請(qǐng)求。

副本討論的是你的數(shù)據(jù)的鏡像。如果你熟悉主從概念,那么這對(duì)你來(lái)說(shuō)不應(yīng)該是新事物。你可以了解更多關(guān)于基本ES概念。

創(chuàng)建索引的cURL版本是單線程的。

如何在Python中進(jìn)行Elasticsearch操作?

你也可以一次執(zhí)行索引創(chuàng)建和記錄插入任務(wù)。你所要做的就是以JSON格式傳遞你的記錄。你可以在PostMan中使用下面的東西:

如何在Python中進(jìn)行Elasticsearch操作?

請(qǐng)確保你將Content-Type設(shè)置為application/json.

一個(gè)名為company的索引會(huì)被創(chuàng)建如果它原本不存在的話,然后在這里創(chuàng)建一個(gè)名為employees的新類型。Type實(shí)際上是RDBMS中的表的ES版本。

上述請(qǐng)求將輸出以下JSON結(jié)構(gòu):

如何在Python中進(jìn)行Elasticsearch操作?

你傳遞/1作為你的記錄的ID,但這是不必要的。它所做的只是將_id字段設(shè)置為值1,然后數(shù)據(jù)以JSON格式傳遞,最終作為新記錄或文檔插入。

如何在Python中進(jìn)行Elasticsearch操作?

你可以看到元和實(shí)際記錄。

cURL版本將是:

如何在Python中進(jìn)行Elasticsearch操作?

如果你想更新該記錄怎么辦?這很簡(jiǎn)單。你所要做的就是改變你的JSON記錄。如下所示:

如何在Python中進(jìn)行Elasticsearch操作?

它會(huì)生成以下輸出:

如何在Python中進(jìn)行Elasticsearch操作?

注意現(xiàn)在_result字段設(shè)置為updated而不是created。

當(dāng)然,你也可以刪除某些記錄。

如何在Python中進(jìn)行Elasticsearch操作?

如果你瘋了,或者你的女朋友甩了你,你可以通過(guò)從命令行運(yùn)行curl -XDELETE localhost:9200/_all來(lái)毀掉整個(gè)世界。

讓我們做一些基本的搜索。 它將搜索employees類型下的所有字段并返回相關(guān)記錄。

如何在Python中進(jìn)行Elasticsearch操作?

max_score字段表示記錄的相關(guān)性,即記錄的最高分?jǐn)?shù)。如果有多個(gè)記錄,那么它會(huì)是一個(gè)不同的數(shù)字。

你還可以通過(guò)傳遞字段名稱將搜索條件限制到某個(gè)字段。

我剛剛介紹了基本的例子。ES可以做很多事情,但是希望你自己通過(guò)閱讀文檔來(lái)進(jìn)一步探索它,而我將繼續(xù)介紹在Python中使用ES。

在Python中使用ElasticSearch

說(shuō)實(shí)話,ES的REST API已經(jīng)足夠好了,可以讓你使用requests庫(kù)執(zhí)行所有任務(wù)。不過(guò),你可以使用ElasticSearch的Python庫(kù)專注于主要任務(wù),而不必?fù)?dān)心如何創(chuàng)建請(qǐng)求。

通過(guò)pip安裝它,然后你可以在你的Python程序中訪問(wèn)它。

如何在Python中進(jìn)行Elasticsearch操作?

為確保它的安裝正確,請(qǐng)從命令行運(yùn)行以下基本片段:

如何在Python中進(jìn)行Elasticsearch操作?

網(wǎng)頁(yè)搜索和Elasticsearch

我們來(lái)討論一下使用Elasticsearch的一些實(shí)際用例。我們的目標(biāo)是訪問(wèn)在線食譜并將它們存儲(chǔ)在Elasticsearch中以用于搜索和分析。我們將首先從Allrecipes中獲取數(shù)據(jù)并將其存儲(chǔ)在ES中。我們還將創(chuàng)建一個(gè)嚴(yán)格的模式或映射,以便我們確保數(shù)據(jù)以正確的格式和類型進(jìn)行索引。最后只要列出沙拉食譜的清單。我們開始吧!

獲取數(shù)據(jù)

如何在Python中進(jìn)行Elasticsearch操作?

如何在Python中進(jìn)行Elasticsearch操作?

所以這是獲取數(shù)據(jù)的基本程序。因?yàn)槲覀冃枰狫SON格式的數(shù)據(jù),所以我對(duì)其進(jìn)行了相應(yīng)的轉(zhuǎn)換。

創(chuàng)建索引

我們得到了所需的數(shù)據(jù),接下來(lái)我們必須存儲(chǔ)它。我們要做的第一件事就是創(chuàng)建一個(gè)索引。讓我們將其命名為recipes。 該類型將被稱為salads。我要做的另一件事是創(chuàng)建我們的文檔結(jié)構(gòu)的映射。

在我們創(chuàng)建索引之前,我們必須連接ElasticSearch服務(wù)器。

如何在Python中進(jìn)行Elasticsearch操作?

如何在Python中進(jìn)行Elasticsearch操作?

這里有很多要說(shuō)的事。首先,我們傳遞了一個(gè)包含整個(gè)文檔結(jié)構(gòu)映射的配置變量。映射是模式這一術(shù)語(yǔ)在Elastic的版本。就像我們?cè)诒砀裰性O(shè)置特定的字段數(shù)據(jù)類型一樣,我們?cè)谶@里做類似的事情。檢查文檔,它涵蓋的不僅僅是這些。所有字段都是文本類型,但是calories類型為Integer。

接下來(lái),我確保索引不存在,然后創(chuàng)建它。參數(shù)ignore = 400在檢查后不再需要,但存在性證明是必要的,因?yàn)檫@可以防止錯(cuò)誤地覆蓋現(xiàn)有索引。雖然這很危險(xiǎn)。這就像覆蓋數(shù)據(jù)庫(kù)。

如果索引成功創(chuàng)建,你可以驗(yàn)證它,它會(huì)輸出如下所示的內(nèi)容:

如何在Python中進(jìn)行Elasticsearch操作?

通過(guò)傳遞dynamic:strict我們使Elasticsearch嚴(yán)格檢查任何傳入的文檔。在這里,salads實(shí)際上是文檔類型。Type實(shí)際上是Elasticsearch對(duì)RDBMS表的回答。

記錄索引

下一步是存儲(chǔ)實(shí)際的數(shù)據(jù)或文檔。

如何在Python中進(jìn)行Elasticsearch操作?

運(yùn)行它,你會(huì)看到:

如何在Python中進(jìn)行Elasticsearch操作?

你能猜到為什么會(huì)這樣嗎?由于我們沒(méi)有在我們的映射中設(shè)置ingredients,因此ES不允許我們存儲(chǔ)包含ingredients字段的文檔?,F(xiàn)在你知道事先分配映射的優(yōu)勢(shì)了。你可以通過(guò)這樣做避免破壞數(shù)據(jù)?,F(xiàn)在,讓我們稍微修改一下映射,現(xiàn)在看起來(lái)如下所示:

如何在Python中進(jìn)行Elasticsearch操作?

我們添加nested類型的ingrdients,然后分配內(nèi)部字段的數(shù)據(jù)類型,即在我們的案例中的text。

nested數(shù)據(jù)類型允許設(shè)置嵌套的JSON對(duì)象的類型。再次運(yùn)行它,你將看到以下輸出:

如何在Python中進(jìn)行Elasticsearch操作?

由于你根本沒(méi)有傳遞_id,因此ES本身為存儲(chǔ)的文檔分配了一個(gè)動(dòng)態(tài)ID。 我使用Chrome,借助名為ElasticSearch Toolbox的工具使用ES數(shù)據(jù)查看器來(lái)查看數(shù)據(jù)。

如何在Python中進(jìn)行Elasticsearch操作?

在我們繼續(xù)之前,讓我們?cè)赾alories字段中發(fā)送一個(gè)字符串,看看它是如何發(fā)生的。請(qǐng)記住,我們已將其設(shè)置為整數(shù)。 在編制索引時(shí)出現(xiàn)以下錯(cuò)誤:

如何在Python中進(jìn)行Elasticsearch操作?

所以現(xiàn)在你知道為文檔分配一個(gè)映射的好處了。如果你不這樣做,它仍然會(huì)工作,因?yàn)镋lasticsearch將在運(yùn)行時(shí)分配它自己的映射。

查詢記錄

現(xiàn)在,記錄被編入索引,是時(shí)候根據(jù)我們的需要查詢它們了。我將創(chuàng)建一個(gè)名為search()的函數(shù),它將顯示我們的查詢結(jié)果。

如何在Python中進(jìn)行Elasticsearch操作?

這是非常基本的。 你在其中傳遞索引和搜索條件。讓我們嘗試一些查詢。

如何在Python中進(jìn)行Elasticsearch操作?

如何在Python中進(jìn)行Elasticsearch操作?

如何在Python中進(jìn)行Elasticsearch操作?

如果你想獲得卡路里超過(guò)20的記錄怎么辦?

如何在Python中進(jìn)行Elasticsearch操作?

你也可以指定想要返回的列或字段。上述查詢將返回卡路里大于20的所有記錄。此外,它將僅在_source下顯示title字段。

結(jié)論

Elasticsearch是一個(gè)功能強(qiáng)大的工具,它可以提供強(qiáng)大的功能幫助你來(lái)返回最準(zhǔn)確的結(jié)果集,從而使你現(xiàn)有的或新的應(yīng)用程序可搜索。我剛剛講述了它的要點(diǎn),你可以繼續(xù)閱讀文檔并熟悉這個(gè)強(qiáng)大的工具。尤其是模糊搜索功能非常棒。如果我有機(jī)會(huì),我會(huì)在即將發(fā)布的帖子中介紹Query DSL。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2983

    瀏覽量

    106627
  • 引擎
    +關(guān)注

    關(guān)注

    1

    文章

    365

    瀏覽量

    22847
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4822

    瀏覽量

    85943

原文標(biāo)題:在Python中使用Elasticsearch

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    何在ADS中進(jìn)行EM仿真

    先生,我想對(duì)90度支線耦合器進(jìn)行EM仿真,我不知道如何在ADS中進(jìn)行EM仿真。請(qǐng)有人知道EM模擬的PDF幫助文檔。你告訴我了嗎 以上來(lái)自于谷歌翻譯 以下為原文Sir, I want to do
    發(fā)表于 12-27 16:28

    docker安裝Elasticsearch操作指南

    docker安裝Elasticsearch以及分詞器
    發(fā)表于 09-16 16:53

    何在Arduino中進(jìn)行編程

    接上篇關(guān)于Arduino基礎(chǔ)環(huán)境配置、界面介紹和C語(yǔ)言基礎(chǔ),這一篇的內(nèi)容為具體如何在Arduino中進(jìn)行編程。在VSCode上配置Arduino什么是VSCodeVSCode,即Visual
    發(fā)表于 07-13 09:07

    何在ROBOGUIDE環(huán)境中進(jìn)行離線編程和仿真?

    何在ROBOGUIDE環(huán)境中進(jìn)行離線編程和仿真?如何學(xué)習(xí)FANUC Robot編程?
    發(fā)表于 09-18 06:33

    何在STM32CubeMX中進(jìn)行串口通信的配置?

    何在STM32CubeMX中進(jìn)行串口通信的配置?
    發(fā)表于 12-13 06:27

    何在STM32CubeMX中進(jìn)行串口通信的配置?

    何在STM32CubeMX中進(jìn)行串口通信的配置?
    發(fā)表于 02-18 07:34

    何在android中進(jìn)行驅(qū)動(dòng)呢

    何在android中進(jìn)行驅(qū)動(dòng)呢?并輸出dev和sys中的界面用程序調(diào)用呢?
    發(fā)表于 03-02 09:53

    何在PADS 3D Layout中進(jìn)行命令操作

    了解如何在 PADS 3D Layout 中對(duì)您的 PCB 使用“Measure Distance”和“Measure Minimum Distance”命令。
    的頭像 發(fā)表于 05-15 06:05 ?5558次閱讀
    如<b class='flag-5'>何在</b>PADS 3D Layout<b class='flag-5'>中進(jìn)行</b>命令<b class='flag-5'>操作</b>

    何在環(huán)境安裝使用Python操作word

    ,也有少許情況會(huì)用到讀操作,在本次教程中都會(huì)進(jìn)行講解,本次課程主要用到以下4個(gè)庫(kù),請(qǐng)大家提前安裝。 升級(jí)pip(便于安裝最新庫(kù)) python -m pip install -U pip
    的頭像 發(fā)表于 09-05 15:13 ?2291次閱讀
    如<b class='flag-5'>何在</b>環(huán)境安裝使用<b class='flag-5'>Python</b><b class='flag-5'>操作</b>word

    何在python代碼中使用HTTP代理IP

    何在python代碼中使用HTTP代理IP。
    的頭像 發(fā)表于 08-04 15:46 ?1408次閱讀

    Python中進(jìn)程的操作

    進(jìn)程是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。
    的頭像 發(fā)表于 08-19 09:45 ?1374次閱讀
    <b class='flag-5'>Python</b><b class='flag-5'>中進(jìn)</b>程的<b class='flag-5'>操作</b>

    Python對(duì)txt進(jìn)行讀寫操作

    Python對(duì)txt進(jìn)行讀寫操作
    的頭像 發(fā)表于 01-11 15:16 ?977次閱讀

    Python 更新 Elasticsearch 的幾種方法

    今天總結(jié)一下通過(guò) Python 更新 Elasticsearch 數(shù)據(jù)的幾個(gè)方法 Elasticsearch 是一個(gè)實(shí)時(shí)的分布式搜索分析引擎,它能讓你以前所未有的速度和規(guī)模,去探索你的數(shù)據(jù)。它被用作
    的頭像 發(fā)表于 11-01 10:11 ?1562次閱讀
    <b class='flag-5'>Python</b> 更新 <b class='flag-5'>Elasticsearch</b> 的幾種方法

    何在Python中使用Scapy進(jìn)行抓包操作

    文章將介紹如何使用 Python 來(lái)進(jìn)行簡(jiǎn)單的抓包操作。 2. Python 中的抓包庫(kù) 在 Python 中,有很多優(yōu)秀的抓包庫(kù),例如 S
    的頭像 發(fā)表于 11-01 14:47 ?4893次閱讀

    何在Linux環(huán)境下高效安裝部署和配置Elasticsearch

    /CentOS-7-x86_64-DVD-2009.iso elasticsearch-7.10.0-linux-x86_64.tar.gz https://www.elastic.co/cn/downloads/past-releases
    的頭像 發(fā)表于 01-16 11:49 ?789次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品