最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python操作Elasticsearch數(shù)據(jù)索引的教程

 更新時(shí)間:2015年04月08日 15:53:32   作者:陳加興  
這篇文章主要介紹了使用Python操作Elasticsearch數(shù)據(jù)索引的教程,Elasticsearch處理數(shù)據(jù)索引非常高效,要的朋友可以參考下

Elasticsearch是一個(gè)分布式、Restful的搜索及分析服務(wù)器,Apache Solr一樣,它也是基于Lucence的索引服務(wù)器,但我認(rèn)為Elasticsearch對(duì)比Solr的優(yōu)點(diǎn)在于:

  •     輕量級(jí):安裝啟動(dòng)方便,下載文件之后一條命令就可以啟動(dòng);
  •     Schema free:可以向服務(wù)器提交任意結(jié)構(gòu)的JSON對(duì)象,Solr中使用schema.xml指定了索引結(jié)構(gòu);
  •     多索引文件支持:使用不同的index參數(shù)就能創(chuàng)建另一個(gè)索引文件,Solr中需要另行配置;
  •     分布式:Solr Cloud的配置比較復(fù)雜。

環(huán)境搭建

啟動(dòng)Elasticsearch,訪問(wèn)端口在9200,通過(guò)瀏覽器可以查看到返回的JSON數(shù)據(jù),Elasticsearch提交和返回的數(shù)據(jù)格式都是JSON.

>> bin/elasticsearch -f

安裝官方提供的Python API,在OS X上安裝后出現(xiàn)一些Python運(yùn)行錯(cuò)誤,是因?yàn)閟etuptools版本太舊引起的,刪除重裝后恢復(fù)正常。

>> pip install elasticsearch

索引操作

對(duì)于單條索引,可以調(diào)用create或index方法。

from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch() #create a localhost server connection, or Elasticsearch("ip")
es.create(index="test-index", doc_type="test-type", id=1,
  body={"any":"data", "timestamp": datetime.now()})

Elasticsearch批量索引的命令是bulk,目前Python API的文檔示例較少,花了不少時(shí)間閱讀源代碼才弄清楚批量索引的提交格式。

from datetime import datetime
from elasticsearch import Elasticsearch
from elasticsearch import helpers
es = Elasticsearch("10.18.13.3")
j = 0
count = int(df[0].count())
actions = []
while (j < count):
   action = {
        "_index": "tickets-index",
        "_type": "tickets",
        "_id": j + 1,
        "_source": {
              "crawaldate":df[0][j],
              "flight":df[1][j],
              "price":float(df[2][j]),
              "discount":float(df[3][j]),
              "date":df[4][j],
              "takeoff":df[5][j],
              "land":df[6][j],
              "source":df[7][j],
              "timestamp": datetime.now()}
        }
  actions.append(action)
  j += 1

  if (len(actions) == 500000):
    helpers.bulk(es, actions)
    del actions[0:len(actions)]

if (len(actions) > 0):
  helpers.bulk(es, actions)
  del actions[0:len(actions)]

在這里發(fā)現(xiàn)Python API序列化JSON時(shí)對(duì)數(shù)據(jù)類型支撐比較有限,原始數(shù)據(jù)使用的NumPy.Int32必須轉(zhuǎn)換為int才能索引。此外,現(xiàn)在的bulk操作默認(rèn)是每次提交500條數(shù)據(jù),我修改為5000甚至50000進(jìn)行測(cè)試,會(huì)有索引不成功的情況。

#helpers.py source code
def streaming_bulk(client, actions, chunk_size=500, raise_on_error=False,
    expand_action_callback=expand_action, **kwargs):
  actions = map(expand_action_callback, actions)

  # if raise on error is set, we need to collect errors per chunk before raising them
  errors = []

  while True:
    chunk = islice(actions, chunk_size)
    bulk_actions = []
    for action, data in chunk:
      bulk_actions.append(action)
      if data is not None:
        bulk_actions.append(data)

    if not bulk_actions:
      return

def bulk(client, actions, stats_only=False, **kwargs):
  success, failed = 0, 0

  # list of errors to be collected is not stats_only
  errors = []

  for ok, item in streaming_bulk(client, actions, **kwargs):
    # go through request-reponse pairs and detect failures
    if not ok:
      if not stats_only:
        errors.append(item)
      failed += 1
    else:
      success += 1

  return success, failed if stats_only else errors

對(duì)于索引的批量刪除和更新操作,對(duì)應(yīng)的文檔格式如下,更新文檔中的doc節(jié)點(diǎn)是必須的。

{
  '_op_type': 'delete',
  '_index': 'index-name',
  '_type': 'document',
  '_id': 42,
}
{
  '_op_type': 'update',
  '_index': 'index-name',
  '_type': 'document',
  '_id': 42,
  'doc': {'question': 'The life, universe and everything.'}
}

常見(jiàn)錯(cuò)誤

  •     SerializationError:JSON數(shù)據(jù)序列化出錯(cuò),通常是因?yàn)椴恢С帜硞€(gè)節(jié)點(diǎn)值的數(shù)據(jù)類型
  •     RequestError:提交數(shù)據(jù)格式不正確
  •     ConflictError:索引ID沖突
  •     TransportError:連接無(wú)法建立

性能

201548154754551.jpg (721×134)

上面是使用MongoDB和Elasticsearch存儲(chǔ)相同數(shù)據(jù)的對(duì)比,雖然服務(wù)器和操作方式都不完全相同,但可以看出數(shù)據(jù)庫(kù)對(duì)批量寫(xiě)入還是比索引服務(wù)器更具備優(yōu)勢(shì)。

Elasticsearch的索引文件是自動(dòng)分塊,達(dá)到千萬(wàn)級(jí)數(shù)據(jù)對(duì)寫(xiě)入速度也沒(méi)有影響。但在達(dá)到磁盤(pán)空間上限時(shí),Elasticsearch出現(xiàn)了文件合并錯(cuò)誤,并且大量丟失數(shù)據(jù)(共丟了100多萬(wàn)條),停止客戶端寫(xiě)入后,服務(wù)器也無(wú)法自動(dòng)恢復(fù),必須手動(dòng)停止。在生產(chǎn)環(huán)境中這點(diǎn)比較致命,尤其是使用非Java客戶端,似乎無(wú)法在客戶端獲取到服務(wù)端的Java異常,這使得程序員必須很小心地處理服務(wù)端的返回信息。

相關(guān)文章

  • python使用selenium實(shí)現(xiàn)批量文件下載

    python使用selenium實(shí)現(xiàn)批量文件下載

    這篇文章主要介紹了python使用selenium實(shí)現(xiàn)批量文件下載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python萬(wàn)字深入內(nèi)存管理講解

    Python萬(wàn)字深入內(nèi)存管理講解

    內(nèi)存管理是指在程序的運(yùn)行過(guò)程中,分配內(nèi)容和回收內(nèi)存的過(guò)程。如果只分配,不回收,電腦上那點(diǎn)內(nèi)存很快就被用光。幸運(yùn)的是,Python和Java等高級(jí)語(yǔ)言會(huì)自動(dòng)管理內(nèi)存的分配和回收
    2022-07-07
  • 使用Python中的Playwright制作測(cè)試視頻的實(shí)現(xiàn)步驟

    使用Python中的Playwright制作測(cè)試視頻的實(shí)現(xiàn)步驟

    Playwright 是一種流行的用于測(cè)試 Web 應(yīng)用程序的自動(dòng)化工具,它提供了多種功能來(lái)使測(cè)試更加高效和可靠,這些功能之一是能夠捕獲測(cè)試運(yùn)行的視頻,在此博客中,田辛老師將探索如何使用 Python 中的 Playwright 制作測(cè)試視頻,感興趣的同學(xué)可以參考本文自己動(dòng)手嘗試
    2023-10-10
  • django中的圖片驗(yàn)證碼功能

    django中的圖片驗(yàn)證碼功能

    這篇文章主要介紹了django中的圖片驗(yàn)證碼功能,需要的朋友可以參考下
    2019-09-09
  • python使用Plotly創(chuàng)建交互式數(shù)據(jù)可視化的操作步驟

    python使用Plotly創(chuàng)建交互式數(shù)據(jù)可視化的操作步驟

    Python 的 Plotly 庫(kù)是創(chuàng)建這種交互式可視化的強(qiáng)大工具,它提供了豐富的圖表類型和易于使用的接口,本文將探討如何使用 Plotly 創(chuàng)建交互式數(shù)據(jù)可視化,包括代碼實(shí)例和深入的解釋,需要的朋友可以參考下
    2024-08-08
  • 淺談pytorch卷積核大小的設(shè)置對(duì)全連接神經(jīng)元的影響

    淺談pytorch卷積核大小的設(shè)置對(duì)全連接神經(jīng)元的影響

    今天小編就為大家分享一篇淺談pytorch卷積核大小的設(shè)置對(duì)全連接神經(jīng)元的影響,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 15個(gè)短代碼示例理解python豐富的編程思維

    15個(gè)短代碼示例理解python豐富的編程思維

    這篇文章主要為大家介紹了python豐富的編程思維,文中通過(guò)python的幾行短代碼示例來(lái)給大家進(jìn)行詳細(xì)的講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 在pycharm創(chuàng)建scrapy項(xiàng)目的實(shí)現(xiàn)步驟

    在pycharm創(chuàng)建scrapy項(xiàng)目的實(shí)現(xiàn)步驟

    這篇文章主要介紹了在pycharm創(chuàng)建scrapy項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python中g(shù)event庫(kù)的用法詳情

    python中g(shù)event庫(kù)的用法詳情

    這篇文章主要介紹了python中g(shù)event庫(kù)的用法詳情,Greenlet全部運(yùn)行在主程序操作系統(tǒng)的過(guò)程中,但是它們是協(xié)作調(diào)度的,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值
    2022-07-07
  • 天翼開(kāi)放平臺(tái)免費(fèi)短信驗(yàn)證碼接口使用實(shí)例

    天翼開(kāi)放平臺(tái)免費(fèi)短信驗(yàn)證碼接口使用實(shí)例

    天翼開(kāi)放平臺(tái)提供了一個(gè)免費(fèi)的短信驗(yàn)證碼API,下面看看使用方法吧,我們用python開(kāi)發(fā)接口
    2013-12-12

最新評(píng)論

库伦旗| 澄江县| 紫阳县| 福清市| 巴楚县| 元氏县| 紫云| 霸州市| 泽州县| 尚义县| 赞皇县| 西畴县| 扶绥县| 瑞昌市| 颍上县| 大兴区| 泊头市| 盐源县| 阳谷县| 巴彦淖尔市| 沂南县| 五寨县| 仁化县| 通河县| 绥阳县| 镇江市| 华宁县| 临泉县| 易门县| 静安区| 临夏县| 江口县| 怀仁县| 乐安县| 宣威市| 津南区| 鲁山县| 巫山县| 东乡族自治县| 高淳县| 新乡县|