Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Setting up Search

Nick Sweeting edited this pageOct 5, 2024 ·28 revisions

Setting Up Search

How to Search in ArchiveBox

You can search your ArchiveBox data in a number of ways:

  • using the CLI:archivebox list --filter-type=search 'text to search' (archivebox list --help for more)
  • using the Web UI: both the/public index and/admin/core/snapshot pages provide a search box
  • using the REST API:/api/v1/list?filter_type=search provides the same search interface as the CLI
  • by searching the archive data folder directly with external tools (e.g. macOS Spotlight,Cerebro,ag,Yacy, etc.)

image



How Search Works

ArchiveBox search works by doing substring matches inSnapshot metadata fields (url,title,timestamp,tags), and by searching the full archived content within each Snapshot (using the selected search backend below). You can find the search implementation source code here:archivebox/core/views.py: PublicIndex.get_queryset().

Note: ArchiveBox currently only returns the bare list of snapshots that match when performing a search.

This will beimproved in the future to highlight thespecific paragraph/line/area that matched within a Snapshot.
For now we recommend using Ctl+F in the browser or one of the external tools listed above to further filter for a term within a Snapshot's contents.


ArchiveBox Search Backends

ArchiveBox provides a number of "Search Backend Engines" to tune its performance & behavior for different use-cases.

# this setting controls which search backend ArchiveBox usesarchivebox config --set SEARCH_BACKEND_ENGINE=[ripgrep]|sonic|sqlite# to see information about the backend you are currently using, run:archivebox versionarchivebox config --get SEARCH_BACKEND_ENGINE

By default out-of-the-box, the selected engine is a simple but efficient tool similar togrep -r calledripgrep.

Ripgrep iscurrently the fastest availablefilesystem search tool that scans over the raw archived files on every search. We chose it as the default so that beginners and 95% of users with small collections can have an experience that "just works", without needing to install and maintain complex additional dependencies or background workers.

However, there are some fundamental limitations of scanning through every file on disk each time a search is done, so ArchiveBox provides a number of additional search backend options for when users outgrowripgrep.

Tip

You should consider switching ArchiveBox to usesonic or another backend IF:

  • you have more than 1,000 Snapshots saved in your archive
  • your archive data is stored on a slower filesystem like a spinning hard drive or remote network mount
  • you want more advanced search features like stemming, boolean operators, and ability to search PDFs, eBooks, ZIP/tar files, etc.

ripgrep(the default)

If you do not already haveripgrep installed, follow theinstructions here to get it.ArchiveBox will useripgrep by default if it is found, however you can explicitly configure it to be used like so:

archivebox config --set SEARCH_BACKEND_ENGINE=ripgreparchivebox config --set RIPGREP_BINARY=rg# check that archivebox detects the installed version:archivebox version# then try it out by searching via the Web UI or CLI:archivebox list --filter-type=search'text to search for'

Pros

  • supports advanced searching with regex patterns
  • simple, few moving parts, and broadly available for all OSs and CPU architectures
  • 0 idle resource use as there is no background indexer process running
  • 0 additional disk storage needed as it searches the original data instead of maintaining a separate index
  • reasonably fast on NVMe and SSD drives for small collections

Cons

  • very slow as archive collection size increases (doesn't scale well beyond 500~1,000 Snapshots)
  • very slow if underlying filesytem is slow (e.g. HDDs or network mounts)
  • doesn't support stemming, boolean operators, or other advanced full-text search features

ripgrep-all (akarga)

The same as ripgrep except that it supports searching more binary filetypes like PDFs, eBooks, Office documents, zip, tar.gz, etc.

To use it, follow theinstall instruction for your OS, then configure ArchiveBox to use it like so:

archivebox config --set SEARCH_BACKEND_ENGINE=ripgreparchivebox config --set RIPGREP_BINARY=rga# check that archivebox detects the installed version:archivebox version# then try it out by searching via the Web UI or CLI:archivebox list --filter-type=search'text to search for'

ugrep

Not tested by the ArchiveBox team but it's very similar toripgrep and may work as a drop-in replacement, with some caveats. (contributions welcome to improve support)

ugrep is similar toripgrep andripgrep-all in that it's an indexless disk-search tool, but it provides some more of the full-text search features without the performance overhead of maintaining a separate search backend worker with an independent index.

https://github.com/Genivia/ugrep

archivebox config --set RIPGREP_BINARY=ugrep+

Pros

  • supportsboolean operators in search queries
  • supports binary formats like compressed archives, PDFs, eBooks, etc.
  • better support for Unicode, special characters, and searching across multiple lines of text
  • supportsfuzzy search

Cons

  • not as fast assonic and but also not as simple asripgrep
  • not all of its features are fully integrated with ArchiveBox yet



sonic ⭐️ (the recommended upgrade path for most people)

Sonic is a fast, lightweight, rust-based alternative to super-heavy traditional search backends like Elasticsearch. It is capable of normalizing natural language search queries, fuzzy matching, and searching Unicode, without needing to maintain a duplicate document store index of all the searchable text.

Internally it functions as an index store, storing only the original IDs of the Snapshots with a super-compressed representation of the text. This allows it to scale to searching terabytes of archive data while maintaining an index only a fraction of that size.

ArchiveBox has supported Sonic for years, and it is the most thoroughly tested and recommended backend for ArchiveBox users that need to scale beyondripgrep.

Usingsonic with ArchiveBox in Docker Compose is the easiest way to get started, though you can also use it without Docker byinstalling it manually and then runningpip install archivebox[sonic].

# edit docker-compose.yml to uncomment the lines that enable sonicnano docker-compose.yml# make sure ArchiveBox is configured to use the Sonic backenddocker compose run archivebox config --set SEARCH_BACKEND_ENGINE=sonic# restart the containers to apply changes and start the Sonic workerdocker compose downdocker compose up# check that the sonic container started without issuesdocker compose logs sonicdocker compose run archivebox version# backfill any existing archivebox data into the Sonic index (may take an hour or longer depending on storage speed and collection size)docker compose run archivebox update --index-only# then test it out:docker compose run archivebox list --filter-type=search'some text to search'

Fore more detailed instructionssee here...

Pros

  • extremely fast, most queries complete in microseconds even with 100k+ snapshots
  • maintains lightweight, compressed search index that is minuscule compared to original data
  • all-in-one binary written in rust, available cross-platform and easy to deploy
  • supports advanced full-text search features like normalization, stemming, etc.
  • supports indexing and querying on a remote server (many ArchiveBox instances can share a singlesonic instance)

Cons

  • one extra dependency to install and background worker to keep running (Docker Compose makes this easy though)
  • does not support searching binary files like PDFs, eBooks, compressed archives, etc.

SQLite FTS5

This is arecently added experimental option that uses a separate SQLite3 Database (similar to the one ArchiveBox already uses for Snapshot metadata) to provide full-text search.

archivebox config --set SEARCH_BACKEND_ENGINE=sqlite# add existing data to index by running update:archivebox update --index-only# test it out using the archivebox Web UI or CLI:archivebox list --filter-type=search'some text to search'# or using SQLite3 directly;sqlite3 ./search.sqlite3> SELECT snapshot_id FROM snapshot_fts      INNER JOIN snapshot_id_fts ON snapshot_id_fts.rowid = snapshot_fts.rowid      WHERE snapshot_fts MATCH"some text to search";
# optional advanced tuning:archivebox config --set FTS_SEPARATE_DATABASE=Truearchivebox config --set FTS_TOKENIZERS="porter unicode61 remove_diacritics 2"archivebox config --set FTS_SQLITE_MAX_LENGTH=1000000000

Pros

  • No additional dependencies needed to install, SQLite3 is already available and used by ArchiveBox
  • No long-running background search worker process needed, 0 idle resource use
  • Supports advanced full-text search features like boolean operators, stemming, phrases, etc.
  • Comparable speed and efficiency tosonic for most use-cases (much faster thanripgrep/ugrep)
  • Durability and portability, SQLite is widely used and supported by every major platform on earth

Cons

  • Not as thoroughly-tested by ArchiveBox team as oursonic orripgrep backends
  • Maintains a (compressed, but still potentially large) duplicate copy of all searchable text insearch.sqlite3 db
  • Does not support searching binary files PDFs, eBooks, compressed archives, etc.
  • Search indexing and querying must be performed on same server as ArchiveBox data (we don't yet support sending FTS5 queries to a remote server)



Further Reading

Clone this wiki locally


[8]ページ先頭

©2009-2025 Movatter.jp