locate
(またはupdatedb
)はやや簡単です。目的のパス(通常「/」)の出力を取得してソートし、find
プレfrcode
圧縮ツール()を使用して圧縮します。ここで、連続する共通プレフィックスは次の数に置き換えられます。繰り返される文字。
もしそうなら、人々が全文検索に似たものを作成するのを防ぐ理由は何ですか?たとえば、システム上のすべてのファイルをリンクし、各行をformatでソートしてから事前圧縮を実行するline:filename:linenumber
のはどうですか?私はあなたがより速いもので終わると思いますgrep
。ただし、毎日/週間のクローンジョブが実行される前に最新の状態にならない対価が発生しますlocate
。
システム全体では多少過剰かもしれませんがlocategrep
、一日中大きく変わらない大規模プロジェクトのスピードを上げるのに役立つと思います。
似たようなものがすでに存在するのか、それとも既知のツールを使用して実装するのは簡単ではありませんか?
メモ:私はプレーンテキスト検索以上の機能を含むエンタープライズレベルのソリューションを避けたいのですが(正規表現のサポートには感謝します)。
ベストアンサー1
一般に、GNU grepはBSDと非常にゆっくりと競います。
ag
(aka the_silver_searcher
)、rg
(aka)、または;などの人は、ripgrep
テキストack
をかなり索引付けしようとせずにすべてのクエリを再検索しますが、約3秒かかります。 GNUは10秒以上かかります。grep
rg
rg FOOBAR
grep
フルテキスト検索を高速化するためにIMAPサーバーがプラグインとして使用するフルテキスト検索エンジン(主にxapian)もあります。これは私に実際に影響を与えることが証明された唯一のユースケースです。
(Ceterum ceneo mandb
em esse delendam;私たちの検索ツールは速すぎて190 MBのマニュアルページインデックスを書き換えるのに30秒かかります。これは許容できないことです。本物マニュアルページなどの統合データには、これらの項目を非常に小さくする圧縮辞書が含まれています。しかし、状況が絡みすぎてマンディを取り除くことができません。 )