RM新时代网站-首页

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

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

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

Elasticsearch概述 怎么安裝ES

CyvZ_datathinks ? 2019-08-28 18:19 ? 次閱讀

1 Elasticsearch概述

1.1 認(rèn)識ES

Elasticsearch是一個基于Lucene庫的搜索引擎。它提供了一個分布式、支持多租戶的全文搜索引擎,可以快速地儲存、搜索和分析海量數(shù)據(jù)。可以用于搜索各種文檔并支持多租戶。Elasticsearch至少需要Java 8。

Elasticsearch概述 怎么安裝ES

1.2應(yīng)用場景

在線網(wǎng)上商店,允許客戶搜索您銷售的產(chǎn)品。在這種情況下,可以使用Elasticsearch存儲整個產(chǎn)品目錄和庫存,并為它們提供搜索和自動填充建議。

收集日志或交易數(shù)據(jù),并分析和挖掘此數(shù)據(jù)以查找趨勢,統(tǒng)計(jì)信息,摘要或異常。在這種情況下,您可以使用Logstash來收集,聚合和解析數(shù)據(jù),然后讓Logstash將此數(shù)據(jù)提供給Elasticsearch。一旦數(shù)據(jù)在Elasticsearch中,您就可以運(yùn)行搜索和聚合來挖掘您感興趣的任何信息。

價(jià)格警報(bào)平臺,允許精通價(jià)格的客戶指定一條規(guī)則,例如“我有興趣購買特定的電子產(chǎn)品,如果小工具的價(jià)格在下個月內(nèi)從任何供應(yīng)商降至X美元以下,我希望收到通知” 。在這種情況下,您可以刮取供應(yīng)商價(jià)格,將其推入Elasticsearch并使用其反向搜索功能來匹配價(jià)格變動與客戶查詢,并最終在發(fā)現(xiàn)匹配后將警報(bào)推送給客戶。

1.3重要概念

集群Cluster:集群是一個或多個節(jié)點(diǎn)的集合,它們共同保存您的整個數(shù)據(jù),并提供跨所有節(jié)點(diǎn)的聯(lián)合索引和搜索功能。

節(jié)點(diǎn)Node:節(jié)點(diǎn)是作為集群一部分的單個服務(wù)器,存儲數(shù)據(jù)并參與群集的索引和搜索功能。

索引Index:索引是具有某些類似特征的文檔集合。索引由名稱標(biāo)識,必須全部小寫,此名稱用于在對其中的文檔執(zhí)行索引,搜索,更新和刪除操作時引用索引。

文檔Document:文檔是可以編制索引的基本信息單元。Index 里面單條的記錄稱為 Document。

分片和副本:索引可能存儲大量可能超過單個節(jié)點(diǎn)的硬件限制的數(shù)據(jù)。為了解決這個問題,Elasticsearch提供了將索引細(xì)分為多個稱為分片的功能。

1.4核心模塊

analysis:主要負(fù)責(zé)詞法分析及語言處理,也就是我們常說的分詞,通過該模塊可最終形成存儲或者搜索的最小單元 Term。

index 模塊:主要負(fù)責(zé)索引的創(chuàng)建工作。

store 模塊:主要負(fù)責(zé)索引的讀寫,主要是對文件的一些操作,其主要目的是抽象出和平臺文件系統(tǒng)無關(guān)的存儲。

queryParser 模塊:主要負(fù)責(zé)語法分析,把我們的查詢語句生成 Lucene 底層可以識別的條件。

search 模塊:主要負(fù)責(zé)對索引的搜索工作。

similarity 模塊:主要負(fù)責(zé)相關(guān)性打分和排序的實(shí)現(xiàn)。

1.5檢索方式

單個詞查詢:指對一個 Term 進(jìn)行查詢。比如若要查找包含字符串“Lucene”的文檔,則只需在詞典中找到 Term“Lucene”,再獲得在倒排表中對應(yīng)的文檔鏈表即可。

AND:指對多個集合求交集。比如若要查找既包含字符串Lucene又包含字符串Solr的文檔,則查找步驟如下:在詞典中找到 Term Lucene得到Lucene對應(yīng)的文檔鏈表。在詞典中找到 TermSolr,得到Solr對應(yīng)的文檔鏈表。合并鏈表,對兩個文檔鏈表做交集運(yùn)算。

OR:指多個集合求并集。比如,若要查找包含字符串Luence或者包含字符串Solr的文檔,則查找步驟如下同上,對兩個文檔鏈表做并集運(yùn)算,合并后的結(jié)果包含Lucene或者包含Solr。

NOT:指對多個集合求差集。比如若要查找包含字符串Solr但不包含字符串Lucene的文檔,則查找步驟如下同上,對兩個文檔鏈表做差集運(yùn)算,用包含Solr的文檔集減去包含Lucene的文檔集,運(yùn)算后的結(jié)果就是包含Solr但不包含Lucene。

2 ES特性與優(yōu)缺點(diǎn)

2.1 ES特性

Elasticsearch可擴(kuò)展高達(dá)PB級的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。

Elasticsearch可以用來替代MongoDB等做文檔存儲。

Elasticsearch使用非標(biāo)準(zhǔn)化來提高搜索性能。

Elasticsearch是受歡迎的企業(yè)搜索引擎之一,目前使用如Wikipedia,GitHub等。

Elasticsearch是開放源代碼,可在Apache許可證版本2.0下提供。

2.2ES優(yōu)點(diǎn)

Elasticsearch是基于Java開發(fā)的,這使得它在幾乎每個平臺上都兼容。

Elasticsearch是實(shí)時的。

Elasticsearch是分布式的,這使得它易于在任何大型組織中擴(kuò)展和集成。

與Apache Solr相比,在Elasticsearch中處理多租戶非常容易。

Elasticsearch使用JSON對象作為響應(yīng)。

Elasticsearch支持幾乎大部分文檔類型,但不支持文本呈現(xiàn)的文檔類型。

2.3ES缺點(diǎn)

Elasticsearch在處理請求和響應(yīng)數(shù)據(jù)方面沒有多語言和數(shù)據(jù)格式支持(僅在JSON中可用),與Apache Solr不同不可以使用CSV,XML等格式。

Elasticsearch也有一些傷腦的問題發(fā)生,雖然在極少數(shù)情況下才會發(fā)生。

3 ES安裝部署

本文主要采用Win10下的Elasticsearch安裝,當(dāng)然Linux安裝操作起來更加簡便了。完成之后對python安裝elasticsearch包,并實(shí)現(xiàn)交互案例。

?第一步:條件檢查

Elasticsearch至少需要Java 8,首先需要java -version查看當(dāng)前版本。

?第二步:安裝ES

這里采用elasticsearch-7.1.0-windows-x86_64下載地址鏈接: https://pan.baidu.com/s/1k5AOGpMy8uJEXtA6KoNb7g 提取碼: qtmj 。

★bin :運(yùn)行Elasticsearch實(shí)例和插件管理所需的腳本
★confg: 配置文件所在的目錄
★lib : Elasticsearch使用的庫
★data : Elasticsearch使用的所有數(shù)據(jù)的存儲位置
★logs : 關(guān)于事件和錯誤記錄的文件
★plugins: 存儲所安裝插件的地方,比如中文分詞工具

然后去運(yùn)行 bin/elasticsearch(Mac 或 Linux)或者 binelasticsearch.bat (Windows) 即可啟動 Elasticsearch 了。我們啟動后發(fā)現(xiàn)網(wǎng)頁并不現(xiàn)實(shí)信息,測試下本地網(wǎng)絡(luò)是否聯(lián)通:

發(fā)現(xiàn)是一般性故障,查詢資料顯示由于防火墻的問題,經(jīng)過測試關(guān)閉”公用網(wǎng)絡(luò)防火墻“即可:

后我們再去ping下本地IP:

這時已經(jīng)顯示ping通狀態(tài),再次啟動binelasticsearch.bat (Windows),打開http://localhost:9200/顯示如下表示成功安裝ES。

?第三步:Python安裝ES

下載地址是https://www.elastic.co/downloads/elasticsearch。如果在windows下安排部署參考文章http://www.cnblogs.com/viaiu/p/5715200.html。如果是Python開發(fā)可以使用pip install elasticsearch安裝。

4 ES構(gòu)建全文搜索

4.1插入數(shù)據(jù)

打開python運(yùn)行環(huán)境,首先導(dǎo)入【from elasticsearch import Elasticsearch】,然后編寫插入數(shù)據(jù)的方法:


# 插入數(shù)據(jù) def InsertDatas(): # 默認(rèn)host為localhost,port為9200.但也可以指定host與port es = Elasticsearch() es.create(index="my_index",doc_type="test_type",id=11,ignore=[400,409],body={"name":"python","addr":'四川省'}) # 查詢結(jié)果 result = es.get(index="my_index",doc_type="test_type",id=11) print('單條數(shù)據(jù)插入完成: ',result)

實(shí)例化Elasticsearch,其中默認(rèn)為空即host為localhost,port為9200。為空也可以指定網(wǎng)絡(luò)IP與端口。通過創(chuàng)建索引index和文檔類別doc_type,文檔id,body為插入數(shù)據(jù)的內(nèi)容,其中ES支持的數(shù)據(jù)僅為JSON類型,ignore=409忽略異常。運(yùn)行結(jié)果如下:

4.2批量插入數(shù)據(jù)

上面案例我們插入一條信息,查詢顯示一系列參數(shù)包括索引、文檔類型、文檔ID唯一標(biāo)識,版本號等。其中資源中包含數(shù)據(jù)信息,如果我們想插入多條信息可以參考以下代碼:


# 批量插入數(shù)據(jù) def AddDatas(): es = Elasticsearch() datas = [{ 'name': '美國留給伊拉克的是個爛攤子', 'addr': 'http://view.news.qq.com/zt2011/usa_iraq/index.htm' },{ "name":"python", "addr":'四川省' }] for i,data in enumerate(datas): es.create(index="my_index",doc_type="test_type", id=i,ignore=[400,409],body=data) # 查詢結(jié)果 result = es.get(index="my_index",doc_type="test_type",id=0) print(' 批量插入數(shù)據(jù)完成: ',result['_source'])

我們將數(shù)據(jù)放在datas列表中,如果我們數(shù)據(jù)在一個json文件中存儲,也可以通過讀取文本信息并保存在datas中,之后對其進(jìn)行插入即可。這里面文件ID我采用枚舉的序號,也可以采用隨機(jī)數(shù)或者指定格式。完成所有插入之后我們選擇第一條id=0的信息查詢,此處查詢與上文不同,我們只看文章內(nèi)容可以采用result['_source']方法,結(jié)果如下:

4.3更新數(shù)據(jù)

如果我們插入數(shù)據(jù)信息有問題,我們想去修正。可以采用update方法,這里面與我們接觸的MySQL,MongoDB等SQL語句差不多。唯一注意的是我們更新數(shù)據(jù)時候采用{"doc":{"name":"python1","addr":"深圳1"}}字典模式,尤其是doc標(biāo)識不能忘記,代碼實(shí)現(xiàn)如下:


# 3 更新數(shù)據(jù) def UpdateDatas(): es = Elasticsearch() es.update(index="my_index",doc_type="test_type",id=11,ignore=[400,409],body={"doc":{"name":"python1","addr":"深圳1"}}) # 更新結(jié)果 result = es.get(index="my_index",doc_type="test_type",id=11) print(' 數(shù)據(jù)id=11更新完成: ',result['_source']['name'])

這里我們假如只想查詢更新后信息的name字段,可以采用source后面加['name']方法,為什么這么設(shè)置呢?請參看插入數(shù)據(jù)運(yùn)行結(jié)果分析。

4.4 刪除數(shù)據(jù)

這里面比較簡單,我們指定文檔的索引、文檔類型和文檔ID即可。


# 刪除數(shù)據(jù) def DeleteDatas(): es = Elasticsearch() result = es.delete(index='my_index',doc_type='test_type',id=11) print(' 數(shù)據(jù)id=11刪除完成: ')

4.5條件查詢數(shù)據(jù)

我們通過插入數(shù)據(jù)構(gòu)建一個簡單我數(shù)據(jù)信息,如果我們想獲取索引中的所有文檔可以采用{"query":{"match_all":{}}}條件查詢,這里面指定關(guān)注的是使用的search方法,上文查詢數(shù)據(jù)采用get方法,其實(shí)兩者都是可以作為查詢使用的。代碼如下:


# 條件查詢 def ParaSearch(): es = Elasticsearch() query1 = es.search(index="my_index", body={"query":{"match_all":{}}}) print(' 查詢所有文檔 ',query1) query2 = es.search(index="my_index", body={"query":{"term":{'name':'python'}}}) print(' 查找名字Python的文檔: ',query2['hits']['hits'][0])

我們獲取索引所有文檔的信息

獲取文檔中name為Python的信息

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

    關(guān)注

    0

    文章

    117

    瀏覽量

    13353
  • Elasticsearch
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    2824

原文標(biāo)題:Python 和 Elasticsearch 構(gòu)建簡易搜索

文章出處:【微信號:datathinks,微信公眾號:datathinks】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux安裝ElasticSearch

    1 版本選擇 ElasticSearch 7 及以上版本都是自帶的 jdk,假如需要配置指定的 jdk 版本的話,可以在 es 的 bin 目錄下找到elasticsearch-env.bat 這個
    的頭像 發(fā)表于 02-15 11:09 ?748次閱讀

    Linux安裝elasticsearch-head

    elasticsearch-head 是一款專門針對于 elasticsearch 的客戶端工具,用來展示數(shù)據(jù)。 elasticsearch-head 是基于 JavaScript 語言編寫的,可以
    的頭像 發(fā)表于 02-15 16:06 ?590次閱讀
    Linux<b class='flag-5'>安裝</b><b class='flag-5'>elasticsearch</b>-head

    Windows安裝ElasticSearch

    Windows安裝ElasticSearch
    的頭像 發(fā)表于 02-15 17:09 ?977次閱讀
    Windows<b class='flag-5'>安裝</b><b class='flag-5'>ElasticSearch</b>

    SpringBoot整合ElasticSearch

    。主要負(fù)責(zé)將日志索引并存儲起來,方便業(yè)務(wù)方檢索查詢。 1 安裝ES 下載地址:https://www.elastic.co/cn/downloads/elasticsearch 選擇Windows版本
    的頭像 發(fā)表于 03-09 14:56 ?642次閱讀
    SpringBoot整合<b class='flag-5'>ElasticSearch</b>

    linux安裝配置ElasticSearch之源碼安裝

    ElasticSearch是基于Lucene這個非常成熟的索引方案,另加上一些分布式的實(shí)現(xiàn):集群,sharding,replication等。以下是對其采用源碼安裝的方法1.下載
    發(fā)表于 01-11 17:27

    基于HanLP的Elasticsearch中文分詞插件

    基于 HanLP 的 Elasticsearch 中文分詞插件,核心功能:兼容 ES 5.x-7.x;內(nèi)置詞典,無需額外配置即可使用;支持用戶自定義詞典;支持遠(yuǎn)程詞典熱更新(待開發(fā));內(nèi)置多種分詞
    發(fā)表于 04-22 15:53

    基于hanlp的es分詞插件

    摘要:elasticsearch是使用比較廣泛的分布式搜索引擎,es提供了一個的單字分詞工具,還有一個分詞插件ik使用比較廣泛,hanlp是一個自然語言處理包,能更好的根據(jù)上下文的語義,人名,地名
    發(fā)表于 07-01 11:34

    在linux上安裝部署ElasticSearch的詳細(xì)操作

    (1)、下載安裝包訪問elasticSearch官網(wǎng)地址 https://www.elastic.co/下載指定版本的安裝包:elasticsearch-6.1.1.tar.gz(2)
    發(fā)表于 07-12 06:10

    docker安裝Elasticsearch操作指南

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

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

    ElasticSearchES)是一個建立在Apache Lucene之上的高度可用的分布式開源搜索引擎
    的頭像 發(fā)表于 07-20 11:12 ?7645次閱讀
    如何在Python中進(jìn)行<b class='flag-5'>Elasticsearch</b>操作?

    hanlp for elasticsearch(基于hanlp的es分詞插件)

    摘要:elasticsearch是使用比較廣泛的分布式搜索引擎,es提供了一個的單字分詞工具,還有一個分詞插件ik使用比較廣泛,hanlp是一個自然語言處理包,能更好的根據(jù)上下文的語義,人名,地名
    發(fā)表于 11-29 15:01 ?342次閱讀

    ElasticSearch是什么?應(yīng)用場景是什么?

    ElasticSearch是什么 ElasticSearch的功能 ElasticSearch的應(yīng)用場景 ElasticSearch的特點(diǎn)
    的頭像 發(fā)表于 10-09 18:38 ?2447次閱讀

    Elasticsearch入門簡介

    Elasticsearch(后續(xù)簡稱ES) 是一個實(shí)時的分布式存儲、搜索、分析的引擎。
    的頭像 發(fā)表于 02-24 09:44 ?670次閱讀

    SpringBoot 連接ElasticSearch的使用方式

    在上篇 ElasticSearch 文章中,我們詳細(xì)的介紹了 ElasticSearch 的各種 api 使用。 實(shí)際的項(xiàng)目開發(fā)過程中,我們通?;谀承┲髁骺蚣芷脚_進(jìn)行技術(shù)開發(fā),比如
    的頭像 發(fā)表于 10-09 10:35 ?1098次閱讀

    Python 更新 Elasticsearch 的幾種方法

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