国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式

這篇具有很好參考價值的文章主要介紹了Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

作者:來自 Elastic?Sean Story

從二進制文件中提取內(nèi)容是一個常見的用例。一些 PDF 文件可能非常龐大 — 考慮到幾 GB 甚至更多。Elastic 在處理此類文檔方面已經(jīng)取得了長足的進步,今天,我們很高興地介紹我們的新工具 —— 數(shù)據(jù)提取服務:

  • 發(fā)布于 8.9 版本,
  • 截至目前,沒有報告任何錯誤!
  • 截至今天,代碼是免費且開放的!

為了將這一切放在其背景下,本博客將帶領(lǐng)你了解我們的旅程如何走到了這一步:

從在 Workplace Search 中使用 Apache Tika 作為庫開始,具有 20 MB 的下載限制 通過利用 Elasticsearch 附件處理器,繞過此限制,將其提升至 100 MB 通過我們的新工具——數(shù)據(jù)提取服務,徹底摧毀限制,攝取以 GB 為單位的文件內(nèi)容 我們對未來發(fā)展的愿景

  • 首先使用 Apache Tika 作為 Workplace Search 中的庫,下載限制為 20 MB
  • 利用 Elasticsearch attachment processor 突破此限制并達到 100 MB
  • 使用我們的新工具數(shù)據(jù)提取服務完全消除限制并提取千兆字節(jié)的文件內(nèi)容
  • 我們對未來發(fā)展的愿望

背景

在 Elastic 公司,特別是在搜索團隊中,我們長期以來一直致力于從二進制數(shù)據(jù)格式中提取和檢索文本數(shù)據(jù)。大量企業(yè)數(shù)據(jù)存在于 PDF、Microsoft Word 文檔、Powerpoint 演示文稿等格式中。如果你從未嘗試過使用 vim、nano 或 cat 打開這些文件,你可能會驚訝地發(fā)現(xiàn),這些文件并不是以人類可讀的文本形式存儲在你的硬盤上。

Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式,Elasticsearch,Elastic,elasticsearch,大數(shù)據(jù),搜索引擎,運維,全文檢索

上面的圖像是當你在 Mac 上使用 TextEdit 應用程序?qū)卧~ “test” 保存為 Microsoft Word 2007 (.docx) 文檔,并嘗試在 nano 中打開時所得到的結(jié)果。

與深入研究不同格式及其結(jié)構(gòu)的細節(jié)相比,這里要強調(diào)的是,當我們談論 “二進制” 內(nèi)容時,指的就是這樣的內(nèi)容。這些內(nèi)容的字節(jié)實際上不是人類可讀的字符串,與 .txt、.rtf、.md、.html、.csv 等格式的情況不同。

為什么這很重要?

Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式,Elasticsearch,Elastic,elasticsearch,大數(shù)據(jù),搜索引擎,運維,全文檢索

相關(guān)性

搜索相關(guān)性幾乎是我們在 Elastic 所做的一切的核心。 為了使文本搜索具有相關(guān)性,Elasticsearch 確實需要文本數(shù)據(jù)。 雖然我絕對可以對上述 .docx 內(nèi)容進行 Base64 編碼并將其發(fā)送到 Elasticsearch,但它們在索引中不會非常有價值,并且對字符串 “test” 的任何查詢都不會匹配這樣的文檔。

Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式,Elasticsearch,Elastic,elasticsearch,大數(shù)據(jù),搜索引擎,運維,全文檢索

因此,如果我們想要在企業(yè)數(shù)據(jù)上實現(xiàn)良好的搜索體驗,我們就需要能夠從這些二進制格式中提取出純文本內(nèi)容。

這就是 Apache Tika 登場的原因。這個開源庫一直是文本提取的黃金標準,貫穿了我的整個職業(yè)生涯(約自2014年起),盡管它至少從 2007 年就存在了。建立在 JVM 上,Tika 相對容易實現(xiàn)以下功能:

  1. 判斷給定字節(jié)序列是否是垃圾數(shù)據(jù)或與已知格式規(guī)范匹配
  2. 如果匹配任何已知格式,則識別匹配的格式是哪種
  3. 如果匹配已知格式,則根據(jù)該格式解析數(shù)據(jù),并提取文本和元數(shù)據(jù)屬性

因此,有一個穩(wěn)定的、行業(yè)標準的工具適用于各種格式。問題在哪里呢?為什么這個主題值得寫成博客文章呢?

架構(gòu)和性能。

在 Elastic,我們重視 speed、scale、relevance。我們已經(jīng)在注意到在搜索時,與二進制內(nèi)容相比,文本內(nèi)容更受青睞時部分解決了相關(guān)性的問題。接下來,讓我們談談規(guī)模。

規(guī)模

在我上述的 .docx 文件中的 “test” 示例中,文件內(nèi)容為 3.4KB。同一個 “test” 字符串在 .txt 文件中只有 4B。這是存儲大小的 x850 增加!此外,當讀入 Java 對象內(nèi)存模型(Tika 用于解析的)時,這很可能會顯著擴展。這意味著,在代表性的數(shù)據(jù)規(guī)模上,內(nèi)存問題變得非常真實。看到幾 MB 大小的 PDF 并不罕見,甚至看到幾 GB 大小的 PDF 也并非聞所未聞。所有這些數(shù)據(jù)都是文本數(shù)據(jù)嗎?幾乎可以肯定不是。我最喜歡的一個事實是,托爾斯泰的整部小說《戰(zhàn)爭與和平》只有大約 3MB 的純文本。希望沒有太多的辦公文檔超過 60萬字。但即使輸出的純文本幾乎可以保證只在 MB 級別,這也不保證解析原始文件所需的 RAM 會這么低。根據(jù)解析器以及你的代碼讀取它的智能程度,你可能需要將整個文件保存在內(nèi)存中,使用 Java 對象模型。你可能還需要它的多個副本。考慮到以上情況,這意味著,在實踐中,你通常需要 GB 級別的 RAM(特別是對于 Java/Tika 來說是 “堆”),以確保一個異常的大文件不會導致你的整個進程崩潰。

速度

現(xiàn)在,讓我們談談速度。如果我有 N 份文檔要處理,處理它們的最快方式是 “并行化” —— 同時處理多個(或全部)文檔。這在很大程度上受到規(guī)模的影響。如果 N=10,而給定文檔大約需要 1 秒鐘處理時間,那么等待 10 秒可能并不算長。但如果 N=1,000,000,000,那么 31 年很可能就太慢了。因此,在大規(guī)模情況下,需要更大的并行化。

然而,當考慮到我們上面討論的規(guī)模的內(nèi)存成本時,這就加劇了你的內(nèi)存需求。一次處理一份文檔可能只需要幾 GB 的內(nèi)存來應對最糟糕的情況,但如果我試圖同時并行處理 1000 份文檔,我可能突然發(fā)現(xiàn)自己需要 TB 級別的 RAM 來應對最糟糕的情況。

有了這個背景,不難理解為什么 Workplace Search,自 7.6.0 起就是 Elastic 提供的產(chǎn)品之一,始終對從二進制文檔中提取文本的并行處理和文檔大小設置了相當嚴格的限制。每個內(nèi)容源一次只能處理一個二進制文檔,將二進制文檔的輸入大小限制在 20 MB 以內(nèi),甚至將輸出長度限制在 100KB(默認情況下 - 這是可配置的)。這些限制相當保守,但考慮到處理任何二進制文件的 JVM 是運行 Enterprise Search 服務器及其所有其他后臺工作的同一個 JVM,這些限制是有道理的。因此,Workplace Search 必須非常小心,不要消耗超過其份額的資源,或者冒著影響其他 Enterprise Search 功能的風險。

這些保守的限制,連同其他因素,是我們正在努力將客戶從 Workplace Search 轉(zhuǎn)移出去的部分原因。(要了解更多關(guān)于這種轉(zhuǎn)變的信息,請查看 Workplace Search 的演變博客文章。)在過去幾年中,我們看到越來越多的客戶需要處理大量文檔,像 Workplace Search 那樣一次只處理一個文檔已經(jīng)不夠用了。

引入附件處理器(Attachment Processor)。最初是作為單獨安裝的 Elasticsearch 插件,附件處理器也利用 Apache Tika 從二進制文檔中提取純文本。然而,與 Workplace Search 中的文本提取不同,這個工具運行在 Elasticsearch 內(nèi)部,并且可以在 Elastic Ingest Pipelines 中利用。搜索團隊開始在大約 8.3.0 版本時大量使用 Ingest Pipelines,首先是在我們的 App Search Crawler 中,然后是在我們的 Connector Packages 中,最近是在我們的 Native 和 Client Connectors 中。將其用于我們的架構(gòu)帶來了一些好處:

  1. Elasticsearch 不需要將文檔的輸入大小限制在區(qū)區(qū) 20MB。
  2. Elasticsearch 已經(jīng)建立了在攝取時進行分布式處理的能力,通過其 Ingest Nodes(這意味著我們可以輕松地水平擴展,并一次處理多于 1 份文檔)
  3. 通過使用 Elasticsearch 的一個功能,我們可以確保我們的文本提取行為與其他 Elastic 使用案例保持一致。

這對我們的新連接器尤其重要,這些新連接器旨在運行在 Enterprise Search 服務器之外,并且不應該被限制在單一生態(tài)系統(tǒng)中。通過使用 Elasticsearch 進行文本提取,我們?nèi)コ宋覀兊倪B接器內(nèi)部需要運行 Tika(記得是 JVM 嗎?)的要求,但通過不更換工具,仍然保持了一致的文本提取行為。

這無疑幫助我們提高了攝取速度,并成為我們策略中的一個重要部分,持續(xù)了多個版本。在查看附件處理器的一些遙測數(shù)據(jù)后,很明顯,Enterprise Search 使用它的份額是最大的。鑒于我們所有的連接器和爬蟲默認使用附件處理器,這并不令人驚訝。它是我們 ent-search-generic-ingestion 管道中的第一個處理器 —— 所有新連接器和爬蟲的默認管道。

Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式,Elasticsearch,Elastic,elasticsearch,大數(shù)據(jù),搜索引擎,運維,全文檢索

事實上,附件處理器對我們的用例變得如此重要,以至于我們是將附件插件轉(zhuǎn)換為開箱即用的模塊(自動隨 Elasticsearch 一起使用)的驅(qū)動動機。

Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式,Elasticsearch,Elastic,elasticsearch,大數(shù)據(jù),搜索引擎,運維,全文檢索

然而,這也帶來了一些權(quán)衡。

首先,雖然 Elasticsearch 沒有我們在企業(yè)搜索中遇到的同樣的 20MB 限制,但它確實有一個最大負載大小的硬性限制為 100MB(由 http.max_content_length 定義)。你可以通過多部分表單數(shù)據(jù)來繞過這一限制,但 Elasticsearch 核心開發(fā)者強烈建議我們不要追求這種思路,因為 100MB 的限制是有其原因的。實際上,雖然這個限制在技術(shù)上是可配置的,我們強烈建議不要增加它,因為我們歷史上觀察到這樣做可能會大大降低 Elasticsearch 集群的穩(wěn)定性。

其次,雖然 Workplace Search 過于積極地處理二進制文件可能導致企業(yè)搜索服務器失敗,但如果附件處理器被賦予過大的工作量,它可能會威脅到 Elasticsearch 集群的健康。通常情況下,這種情況更糟。雖然 Elasticsearch 能夠在攝入時進行分布式處理(CPU)工作負載,但這不是它的主要關(guān)注點。Elasticsearch 主要設計用于搜索,其進行分布式處理的能力不是主要焦點。它不應該(也不會)為處理多個大型 PDF 文件的重型工作負載而優(yōu)化。

相反,我們的團隊轉(zhuǎn)向了一種新的方法 —— 構(gòu)建一個專門用于二進制內(nèi)容提取的獨立服務,該服務在當前的一系列流程之外運行。

介紹:數(shù)據(jù)提取服務

這項服務是在 Elastic 8.9.0 版本發(fā)布時(作為 Beta 版本)推出的。它是一個專用的獨立服務器,能夠通過 REST API 接收你的二進制文檔作為輸入,并響應其純文本內(nèi)容,以及一些最小的元數(shù)據(jù)。

通過將該流程與我們的連接器和 Elasticsearch 分離開來,我們創(chuàng)建了一個可以輕松水平擴展的服務。這樣,成本和速度之間的權(quán)衡就可以輕松控制,你不必為其中一個進行優(yōu)化而被束縛。

此外,該服務的分離允許你在邊緣附近部署它,以避免大型文件負載的額外網(wǎng)絡跳躍。通過在連接器和數(shù)據(jù)提取服務在同一文件系統(tǒng)上共存時利用文件指針,我們可以完全消除從源系統(tǒng)獲取文件后通過網(wǎng)絡發(fā)送文件的需求。

目前,該服務主要只是 Tika Server 的一個包裝器。然而,我們希望(有一天)能夠?qū)ξ覀內(nèi)绾谓馕?處理每種文件類型進行細粒度控制。也許對于某些文件類型 X,有些工具比 Tika 更高效。例如,一些個別證據(jù)表明,工具 pdf2txt 在解析 PDF 文件時可能比 Tika 更有效率。如果進一步的實驗證實了這一點,那么使用最適合工作的工具將有利于我們的產(chǎn)品。

我們通過將數(shù)據(jù)提取服務構(gòu)建為一個可以定義自己 REST API 的 Nginx 反向代理,并動態(tài)將傳入請求路由到各種后端來為此做了架構(gòu)設計。這是通過一些自定義的 Lua 腳本實現(xiàn)的(這是 Nginx 的一個特性)。

Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式,Elasticsearch,Elastic,elasticsearch,大數(shù)據(jù),搜索引擎,運維,全文檢索

Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式,Elasticsearch,Elastic,elasticsearch,大數(shù)據(jù),搜索引擎,運維,全文檢索

此工具的初步反饋極為正面。到目前為止,我們收到的 “bug” 報告只有:

  1. 找到它的 Docker 鏡像太難了。
  2. 代碼不是開源的。

我們收到的增強功能請求要多得多,我們很興奮能夠優(yōu)先考慮這些請求,這也顯示了人們對這個項目有多少熱情。

不過,關(guān)于錯誤,我們已經(jīng)修復了 docker 映像的歧義,你現(xiàn)在可以在這里輕松瀏覽我們的所有工件:https://www.docker.elastic.co/r/enterprise-search/data-extraction-service。 關(guān)于源代碼,我非常高興地宣布 GitHub 存儲庫現(xiàn)已公開 - 使數(shù)據(jù)提取服務代碼免費且開放!

接下來呢?

首先,我們希望通過開放代碼倉庫,進一步吸引我們充滿熱情的用戶社區(qū)。我們希望集中處理增強功能請求,并開始征集更多的公開反饋。我們絕對歡迎社區(qū)的貢獻!我們相信,這是確保這個項目繼續(xù)有機演進,使所有人受益的最佳方式。

長遠愿景是什么?

注意,Elastic 并沒有承諾這一點。整個團隊甚至可能不會完全同意。但是出于熱情的原因,我想與你分享我的個人愿景。

我希望將這項服務發(fā)展到不僅僅是從辦公文檔中提取純文本??伤阉鞯臄?shù)據(jù)存在于圖像(掃描/復印的文檔、圖形橫幅/幻燈片)、音頻文件(音樂、播客、有聲書、電話錄音、Zoom 音頻)和視頻文件(電影、電視節(jié)目、Zoom 視頻)中。即使是純文本中也包含了嵌入其中的次文本數(shù)據(jù),可以通過現(xiàn)代機器學習技術(shù)(情感分析、實體識別、語義文本、GenAI)來訪問。所有這些都共享著需要大文件和文檔處理來實現(xiàn)一流搜索體驗的共同問題。它們都將受益于 Elasticsearch 提供的相關(guān)搜索,但可能不都適合于需要大量 CPU 的攝入工作負載。所有這些都可能受益于擁有一個專用的、水平可擴展的提取服務,可以位于 “邊緣”,以改善大規(guī)模攝入速度。

Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式,Elasticsearch,Elastic,elasticsearch,大數(shù)據(jù),搜索引擎,運維,全文檢索

這還不是現(xiàn)實。 這是一個目標。 一顆北極星。 隨著我們越來越接近愿景,愿景可能會發(fā)生變化,但這不會阻止我們朝著目標邁出戰(zhàn)略性的小步驟。

如果你想幫助我們實現(xiàn)這一目標,請訪問 https://github.com/elastic/data-extraction-service,并加入該項目。 歡迎新貢獻者。

準備好將 RAG 構(gòu)建到你的應用程序中了嗎? 想要嘗試使用向量數(shù)據(jù)庫的不同 LLMs?
在 Github 上查看我們的 LangChain、Cohere 等示例筆記本,并參加即將開始的 Elasticsearch 工程師培訓!

原文:Evolving How We Ingest Binary Document Formats — Elastic Search Labs文章來源地址http://www.zghlxwxcb.cn/news/detail-846797.html

到了這里,關(guān)于Elasticsearch:我們?nèi)绾窝莼幚矶M制文檔格式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 前端處理二進制流文件導出為excel表

    前端處理二進制流文件導出為excel表

    將后端返回的二進制流文件 導出為excel表 用的時候直接調(diào)用showConfirm函數(shù)即可 最后效果 get接口是自己封裝的,封裝如下

    2024年02月11日
    瀏覽(21)
  • uniapp小程序中處理blob二進制流數(shù)據(jù)

    小程序中是不支持blob格式數(shù)據(jù)的,new Blob()會報錯Blob未定義 處理方法是轉(zhuǎn)成base64格式: 首先,請求中要帶上responseType: \\\"arraybuffer\\\",保證返回的數(shù)據(jù)格式是arraybuffer 使用uni.arrayBufferToBase64() 轉(zhuǎn)化成base64格式,后續(xù)根據(jù)業(yè)務處理數(shù)據(jù)即可。 在這個代碼中,數(shù)據(jù)是一張png格式的二維

    2024年02月04日
    瀏覽(25)
  • Vue前端處理blob二進制對象圖片的方法

    Vue前端處理blob二進制對象圖片的方法

    近期在做開發(fā)的時候遇到一個問題,前端傳遞一個參數(shù),后端返回一張圖片,前端再將該圖片展示出來,由于是第一次處理二進制圖片對象,特此記錄一下。 首先,已知后端接口無誤,傳遞參數(shù)可以正常返回圖片 ? ?前端調(diào)用接口,打印并查看獲取到的響應數(shù)據(jù): ? ? 顯然

    2024年02月16日
    瀏覽(25)
  • 如何使用VSCode來查看二進制文件

    如何使用VSCode來查看二進制文件

    2023年11月6日,周一下午 目錄 方法1:安裝插件Binary Viewer 然后用vscode打開一個二進制文件,并點擊右上角的\\\"HEX\\\" 方法2:安裝插件Binary 然后用vscode打開一個二進制文件,并點擊右上角的\\\"B\\\" 特點:功能比較完善 然后用vscode打開一個二進制文件,并點擊右上角的\\\"HEX\\\" 特點:功能簡

    2024年02月03日
    瀏覽(41)
  • Unity 如何導入二進制Spine文件

    Unity 如何導入二進制Spine文件

    總是忘記Spine導出二進制到Unity的設置,記錄一下。 TIP 此教程只滿足URP渲染管線與Linear顏色空間的需求 紋理打包器也修改一下拓展名(日常操作) 修改圖集擴展名 不要 勾選圖集的 預乘Alpha ,勾選 溢出 修改圖集擴展名 .atlas.txt 可導出以下幾種文件 Default Shader 設置為 Univer

    2024年02月07日
    瀏覽(28)
  • 5.7:Python如何讀取二進制文件?

    隨著信息技術(shù)的不斷發(fā)展,二進制數(shù)據(jù)已經(jīng)成為了現(xiàn)代計算機應用中不可或缺的一部分。在許多情況下,我們需要讀取和處理二進制數(shù)據(jù),這些數(shù)據(jù)可能包括圖像、音頻、視頻、壓縮文件等。Python作為一種流行的編程語言,提供了多種方法和庫,可以幫助我們讀取和處理各種

    2024年02月06日
    瀏覽(28)
  • 如何將一個實例的內(nèi)存二進制內(nèi)容讀出來?

    如何將一個實例的內(nèi)存二進制內(nèi)容讀出來?

    在《如何計算一個實例占用多少內(nèi)存?》中我們知道一個值類型或者引用類型的實例在內(nèi)存中占多少字節(jié)。如果我們知道這段連續(xù)的字節(jié)序列的初始地址,我們就能夠?qū)⒋碓搶嵗淖止?jié)內(nèi)容讀取出來。在接下來的內(nèi)容中,我們將利用一個簡單的方法輸出指定實例的字節(jié)序列

    2024年02月08日
    瀏覽(23)
  • Java 中圖片與二進制之間如何相互轉(zhuǎn)換?

    1、?下面是一個完整的代碼示例。 指定文件路徑轉(zhuǎn)為二進制 將網(wǎng)絡圖片轉(zhuǎn)為二進制 base64 轉(zhuǎn)為圖片資源 2、如何判斷 base64 圖片的格式? 3、將網(wǎng)絡圖片轉(zhuǎn)為 base64 字符串 4、將 base64 字符串轉(zhuǎn)為圖片輸出 注:該方法的入?yún)?,base64 格式文件不得有 文件頭部標識信息,否則會轉(zhuǎn)換

    2024年02月10日
    瀏覽(31)
  • 2023-05-11:給你一個 m x n 的二進制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將

    2023-05-11:給你一個 m x n 的二進制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將

    2023-05-11:給你一個 m x n 的二進制矩陣 grid, 每個格子要么為 0 (空)要么為 1 (被占據(jù)), 給你郵票的尺寸為 stampHeight x stampWidth。 我們想將郵票貼進二進制矩陣中,且滿足以下 限制 和 要求 : 覆蓋所有空格子,不覆蓋任何被占據(jù)的格子, 可以放入任意數(shù)目的郵票,郵票

    2024年02月09日
    瀏覽(20)
  • 【JavaScript】后端返回的二進制流音頻數(shù)據(jù)或本地音頻資源,前端如何播放?

    如果我們要使用本地的音頻資源,在 vue3 中那么我們需要對資源的地址做一下處理 后端返回二進制流音頻數(shù)據(jù),怎么讓其可播放 前端播放二進制語音流

    2024年02月03日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包