ReactOS Search

From ReactOS Wiki
Jump to: navigation, search

The goal of the ReactOS Search is to provide a tiny, fast and reliable search tool with a simple to use user interface on the one hand and for experts extended search queries, metadata and content database for faster search results, simple system wide api on the other hand.

Applications

  • Search Tool
    • The W32/Ros32 GUI application which show the search results.
    • simple and consistent graphical user interface
    • extended search queries through (by default hidden) UI objects/settings.
    • optional command-line mode
  • DatabaseFeeder
    • Responsible for the metadata and content database.

Code from other projects

SQLite3

SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine. Features include:

  • Transactions are atomic, consistent, isolated, and durable (ACID) even after system crashes and power failures.
  • Implements most of SQL92. (Features not supported)
  • A complete database is stored in a single disk file.
  • Database files can be freely shared between machines with different byte orders.
  • Supports databases up to 2 tibibytes (2^41 bytes) in size.
  • Sizes of strings and BLOBs limited only by available memory.
  • Small code footprint: less than 250 KiB fully configured or less than 150 KiB with optional features omitted.
  • Faster than popular client/server database engines for most common operations.
  • Simple, easy to use API.
  • Well-commented source code with over 95% test coverage.
  • Self-contained: no external dependencies.
  • Sources are in the public domain. Use for any purpose.
  • more information: http://www.sqlite.org

Data Integrity

SQLite provides transaction data integrity. If a program or OS crash or a power failure interrupts a database change, the change is either automatically completed or rolled back after the next reboot. The database is not corrupted by an incomplete write operation. SQLite is written in C but supports bindings to dozens of different programming languages.

Competitors

There are already a lot search tools around us, although most of them lack in some areas.

Note: some of the following apps may contain spy-/ad-ware and some of them may slow down so that it could be become unusable.

Ideas

Unformatted plain text ideas by frik85. I will extend, sort and format the following text later.

SQLite3 database files:
* Metadata.db
* Contents.db
* Conversations.db
* Contacts.db
Views (GUI):
* Quick search (for normal user)
* Advanced search (regular expressions, query builder, extended metadata, etc.)
* Timeline (like the WinFS demp app: list all indexed files on a timeline)
* Dynamic Folders (saved queries to a xml file, the explorer view them as a folder)
Quick search:
Simple textbox, no other visible gui objects which could confuse user.
Simple regular expressions will be composed by the program logic, similar to web search engines or e.g. "Spotlight":
* space characters => AND
* "|" => OR
* "+" => "="
* "-" => "!="
* maybe support for "(" and ")"
Sample Queries:
 1) taskmgr.exe
 2) react*.pdf
 3) *.jpg -games +wallpaper
Advanced Search:
It could be wise to combine the quick search and the advanced search. For example by default only a simple textbox is visible.
If the user click on the "advanced search" button, more gui objects will be visible.
Sample Queries:
 1.a) File.Name="taskmgr" AND File.Extention="exe"
 1.b) File.Filename="taskmgr.exe"
 2) File.Name="react*" AND File.Extention="pdf"
 3) File.Extention="jpg" AND File.Name!="*games*" AND File.Name="*wallpaper*"
 4) File.Extention="jpg" AND Picture.Height>=768 AND Picture.Width>=1024
 5) File.Category="Media" AND File.Size>="100000" AND ( Video.Description="*reactos*" OR Audio.Composer="*friedl*" ) SORT BY "File.Size"
 6) File.Date>=Date.Tomorrow AND File.Date<=Date.NextWeekend
Feature requests:
* search only within a directory
* Beagle includes an optional Firefox Extension. This is used to index web sites as you view them.
* Metadata, fulltext and thumbnails are extracted from documents, images, mp3 and other media allowing quick and accurate information retrieval.
* Advanced search with boolean operators
* Better support for removable media
* Web interface (like Google Desktop Search)
* Definition of document categories
* Scheduled updates
* Tag support (like ajax webpages, e.g. gmail)
* Timeline view/app of all indexed files, contacts, etc. (like WinFS demo app)
* Saved queries (like apple spotlight's "dynamic dirs")
* Multiuser catalog repository
* Integrated Web search
Kat is a framework designed to allow KDE applications to index and retrieve files.
Metadata, fulltext and thumbnails are extracted from documents, images, mp3 and other media allowing quick and accurate information retrieval.
Kat is similar to the Windows applications WhereIsIt and Google Desktop Search, the Gnome program Beagle and the OS X utility Spotlight. It is completely
written in C++, using Qt3, KDE and KIO libraries. The application is based on the extensible kfile plugin architecture of KDE in order to facilitate the
creation of new media managers for emerging file formats. Kat is the first KDE application using the new fulltext kfile plugins.
Information retrieval relies on the powerful SQLite3 embedded database engine.
http://www.whereisit-soft.com/
http://www.beaglewiki.org/Optional_prerequisites
Is there a Beagle IRC channel?
Yes:
Server: irc.gimp.org
Channel: #dashboard
--> http://www.beaglewiki.org/FAQ
TM: I notice a few distros are shipping with Beagle, how is yours different? better?
Roberto: From a technical point of view:
Beagle is a Gnome application, written in C# (and another 2 or 3 languages), using the MONO library and lucene. Kat is a KDE application, written in C++,
using KDE and KIO libraries, using and extending the KDE architecture.
From a functional point of view:
Beagle is only a Desktop Search engine, like Google desktop search. Kat technology will be used as a base for the Context Linking engine of KDE
called Tenor. This means that we index files and content like Beagle, but then we go beyond this and link the items based on their context.
The result is: better and more accurate search.
http://dot.kde.org/1113428593/
http://www.osnews.com/story.php?news_id=10295
http://www.linuxplanet.com/linuxplanet/reviews/5816/1/