欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    al Town 是工程師 Tom MacWright 開發的一個用于編寫和部署 TypeScript 的社交網站。近日,Tom MacWright 想在網站上增加一個“代碼搜索”的功能,然而,隨著嘗試的深入,他發現,一切遠沒有想象中那么容易,尤其是在不雇傭一個專門負責“搜索團隊”的情況下,實現大規模搜索代碼是很困難的。以下是他的一些經驗分享。

    原文:https://blog.val.town/blog/search-notes/


    作者 | Tom MacWright
    責編 | 蘇宓
    出品 | CSDN(ID:CSDNnews)

    以下為譯文:

    Val Town 網站的搜索功能不是很好。目前,它是基于 Postgres ILIKE 功能構建的,只執行子串搜索:如果代碼中有搜索詞,就會出現在搜索結果中。這幾乎不涉及排名,而且對多詞查詢的支持也很差。對于 Val Town 而言,更好的搜索是我們最需要的功能之一。

    我正在努力改進這一點,但我們還沒有找到適合我們需求的解決方案。以下是我們的一些研究筆記。目前我們了解到的情況是:

    • 主流搜索解決方案是針對自然語言而非代碼設計的。

    • 有代碼搜索需求的大公司花費了大量時間和金錢來構建自己的定制解決方案。

    • 我們已經有了大量數據,需要一個能很好擴展的解決方案。

    • 使用單獨的搜索服務而不是數據庫擴展所涉及的基礎設施和復雜性權衡非常重要。

    代碼搜索與自然語言搜索

    行業中現成搜索解決方案的一個常見問題是,它們是針對英語和其他自然語言設計的。例如,在通常的 FTS(Full Text Search)設置中,默認情況下會使用以下一些算法:

    • 刪除停頓詞:在索引文本之前,會從文本中刪除“the”和“it”等詞,因為它們太常見了,會給性能帶來更多問題,得不償失。

    • 詞干提取:這主要是反轉連接詞,在將“running”這樣的詞添加到索引之前將其轉化為“run”,并對搜索查詢進行同樣的處理,這樣你就可以搜索“runs”,并得到包含“running”一詞的文檔的搜索結果。

    • 詞形還原:有些搜索索引甚至可以用同義詞替代更常見的詞,這樣,搜索 “excellent”就可以得到包含“great”的文檔結果。

    總而言之,這意味著從你存儲在索引中的文檔向量與文檔完全不一樣:

    select * from to_tsvector('english', 'I am writing this example sentence');--- 'exampl':5 'sentenc':6 'write':3

    所有這些規則的問題在于它們會對代碼造成嚴重破壞。在 TypeScript 中,“the”并不是一個停止詞:它是一個有效的變量名,你可能想搜索它。單詞邊界不一樣,對函數名進行詞干處理沒有太大意義。

    • select * from to_tsvector('english', 'function stringifyNumber(a: number): string { return a.toString() }');-- 'a.tostring':7 'function':1 'number':4 'return':6 'string':5 'stringifynumb':2

      這是一個相當糟糕的索引:它包含了一些本應是停止詞的單詞,如 function,而且不會將 a.toString() 分割成兩個詞塊,因為.不是默認的詞邊界。

      全文搜索

      Postgres 有一個全文搜索的擴展(https://www.postgresql.org/docs/current/textsearch.html),我們的托管提供商Render 支持該擴展。我在以前的項目中使用過 FTS(Full Text Search),對于某些規模的項目,它的效果非常好。你可以嘗試用 Postgres 來處理所有事情,老實說,到目前為止,我們一直在使用 Postgres。這是一項非常棒的技術,有很好的文檔,我們的托管提供商也提供了很好的支持。

      如果我們能使用 Postgres,我們就會使用:對于一個小團隊來說,保持基礎設施盡可能簡單是至關重要的。

      不過,我之前使用 FTS 的項目都遇到了性能問題,難以擴展--Observable 最終遷移到了 Elasticsearch。我們有大量的 vals,正在測試單節點 Postgres 集群的極限。很難找到使用 FTS 進行代碼搜索的記錄,不過可能有人在悄悄地使用它取得了成功。我想避免將其作為第一選擇,而是將其放在我的后備選項中。

      pg_trgrm

      我們作為 v2 搜索算法軟啟動的解決方案是基于 pg_trgrm,它在 Postgres 中實現了 trigram 搜索。代碼搜索似乎確實可以通過 trigram三元組)獲得成功:

      • Russ Cox(Go 語言創建者之一)在 2012 年發表的一篇著名文章講述了 Google 代碼搜索如何使用 trigram 索引和特殊的正則表達式實現在技術上取得成功的故事(https://swtch.com/~rsc/regexp/regexp4.html)。

      • GitHub 的新搜索系統也使用了 trigram 代碼搜索,此外還有很多我都很羨慕的技術(https://github.blog/2023-02-06-the-technology-behind-githubs-new-code-search/)

      • Sourcegraph 也從 Google 繼承了基于 trigram 的搜索工具(https://github.com/sourcegraph/zoekt)。

      Stephen Gutekanst(Sourcegraph CTO)關于在 Postgres 本地為版本庫建立索引的系列博文為我們使用 Postgrespg_trgrm方法提供了大量信息(https://devlog.hexops.com/2021/postgres-regex-search-over-10000-github-repositories/)。我們用 gin_trgm_ops 在包含搜索文本的列上創建了一個 GIN 索引(https://www.postgresql.org/docs/current/gin.html)。

      目前得出的結論是,這對于 regex 搜索來說是一個很好的解決方案,但我們并不是在進行 regex 搜索:大多數搜索都比較自由。我們使用 word_ similarity 進行搜索排名,但很難哄騙算法給我們一個合理的排序。

      選擇范圍

      有一些專門針對代碼的工具,但大多數都是閉源的:GitHub 的搜索功能非常出色,但顯然是一個擁有實時預算的專業團隊的杰作。

      • Sourcegraph 維護的 Zoekt(https://github.com/google/zoekt)分支非常酷,但卻非常小眾,而且需要大量新的基礎設施投入。

      • Elasticsearch (https://github.com/elastic/elasticsearch)可能是這個問題最終不可避免的解決方案。它沒有代碼特定的處理方式,但可以以幾乎無限的方式進行定制。我們開始學習 Java 內存調優,并為我們的應用程序引入第一個持久磁盤存儲,同時為我們的數據提供額外的真實來源,我們并不感到興奮。也許我們可以使用 Elasticsearch Cloud 來避免維護開銷。

      • Meilisearch(https://github.com/meilisearch/meilisearch)似乎是一個很有前途的 ES 替代方案,具有 Rust 的光芒,但他們似乎更強調延遲而非可擴展性,而且我們不確定基礎設施的投入是否會更低。

      • ParadeDB(https://www.paradedb.com/)承諾會像 Elasticsearch 一樣,但“只是 Postgres”,這非常吸引人,但我們還不能在 Render 中使用他們的擴展。

      總結

      總之,我們還在努力中。搜索代碼而不是英文,難度會更高一些。對于一個小團隊來說,我們的目標是保持基礎架構簡單、開發環境易于設置、數據存放在同一個地方,因此我們盡量小心謹慎,避免使用需要不斷維護的東西。大多數大中型公司都有一個搜索“團隊”,而不僅僅是一個搜索服務,這是有原因的。


    索F盤下面的exe文件

    DM UltraFinder是一款強大的文件搜索和替換工具。它可以幫助用戶快速定位和查找計算機上的文件,同時支持高級搜索功能,包括正則表達式、通配符、文件屬性過濾等。此外,UltraFinder還具備批量文件替換功能,可以輕松地將指定的內容替換為其他內容。

    使用IDM UltraFinder,您可以:

    搜索文件:您可以通過指定關鍵詞、文件類型、文件大小、修改日期等條件來搜索文件。UltraFinder支持快速搜索和高級搜索功能,以滿足不同的搜索需求。

    高級搜索選項:UltraFinder支持正則表達式、通配符和文件屬性過濾等高級搜索選項,可以更精確地定位到需要的文件。

    預覽搜索結果:在搜索過程中,UltraFinder可以提供搜索結果的預覽,您可以在不打開文件的情況下查看內容,快速確定是否找到了需要的文件。

    批量文件替換:UltraFinder還具備批量文件替換功能,您可以指定要替換的內容,并選擇要替換的文件或文件夾進行批量替換操作。

    使用IDM UltraFinder的步驟如下:

    下載并安裝IDM UltraFinder軟件。

    打開UltraFinder,在搜索欄中輸入關鍵詞或選擇高級搜索選項。

    點擊“搜索”按鈕開始搜索,UltraFinder將會列出符合條件的搜索結果。

    您可以在搜索結果中預覽文件內容,選擇需要的文件進行操作,如打開、復制、移動或替換等。

    如果需要進行批量替換操作,可以使用UltraFinder的替換功能,指定替換的內容和操作范圍,然后點擊“替換”按鈕進行批量替換。

    IDM UltraFinder的應用場景非常廣泛,適用于各種需要進行文件搜索和替換的情況。以下是一些常見的應用場景:

    文件管理:UltraFinder可以幫助您快速定位和查找計算機上的文件,無論是個人使用還是在工作中,都能提高文件管理的效率。您可以搜索特定類型的文件、按照修改日期進行篩選,或者使用正則表達式來匹配復雜的文件名。

    軟件開發:對于開發人員而言,UltraFinder是一款有力的工具。您可以使用它來搜索代碼文件、類、方法等,從而快速定位到需要修改或調試的部分。此外,通過批量替換功能,您可以一次性修改多個文件中的特定內容。

    數據分析:在進行數據分析時,經常需要處理大量的文本文件。UltraFinder可以幫助您搜索并提取所需的數據,以支持您的分析工作。您可以使用高級搜索選項來過濾出符合特定條件的文件,并進行進一步的處理或分析。

    網站維護:如果您需要對網站進行更改或更新,UltraFinder可以幫助您快速搜索到需要修改的文件,并進行批量替換操作。這對于更新網頁鏈接、修改頁面布局或更換圖片等任務非常有用。

    文檔整理:對于需要整理大量文檔的個人或機構來說,UltraFinder可以幫助您快速搜索到特定的文件,并進行歸檔、移動或刪除操作。您可以通過搜索關鍵詞、文件類型或其他屬性來快速篩選和處理文檔。

    IDM UltraFinder還具有以下特點和功能:

    快速搜索:UltraFinder使用高效的搜索算法,可以快速地搜索計算機上的文件,并在搜索結果中快速定位到需要的文件。

    高級搜索選項:UltraFinder支持正則表達式、通配符和文件屬性過濾等高級搜索選項,以支持更精確的搜索需求。

    文件預覽:在搜索結果中,UltraFinder可以提供文件預覽功能,您可以在不打開文件的情況下查看內容,快速確定是否找到了需要的文件。

    批量文件替換:UltraFinder具有批量文件替換功能,可以幫助您一次性修改多個文件中的特定內容,從而提高工作效率。

    多種文件類型支持:UltraFinder支持搜索各種類型的文件,包括文本文件、PDF文件、Word文件、Excel文件、PowerPoint文件、圖像文件等。

    友好的用戶界面:UltraFinder的用戶界面簡單明了,易于使用,即使是不熟悉計算機技術的用戶也能快速上手。

    IDM UltraFinder是一款功能強大、易于使用的文件搜索和替換工具,適用于各種場景。它不僅可以幫助您快速定位和查找計算機上的文件,還可以支持高級搜索和批量替換功能,從而提高工作效率和準確性。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有