PHPackages                             divineomega/omega-search - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. divineomega/omega-search

Abandoned → [jord-jd/omega-search](/?search=jord-jd%2Fomega-search)Library[Search &amp; Filtering](/categories/search)

divineomega/omega-search
========================

Search allows you to easily add an intelligent search engine to your website or web application.

v5.0.0(2mo ago)22471LGPL-3.0-onlyPHP

Since Jul 23Pushed 2mo agoCompare

[ Source](https://github.com/Jord-JD/omega-search)[ Packagist](https://packagist.org/packages/divineomega/omega-search)[ GitHub Sponsors](https://github.com/DivineOmega)[ RSS](/packages/divineomega-omega-search/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (6)Dependencies (3)Versions (7)Used By (0)

Omega Search
============

[](#omega-search)

Omega Search allows you to easily add an intelligent search engine to your website or web application. It can be configured to search any database table.

If you are using the Laravel framework, take a look at the [Laravel Omega Search](https://github.com/Jord-JD/laravel-omega-search) package.

Installation
------------

[](#installation)

You can install this package with Composer.

```
composer require jord-jd/omega-search

```

Usage
-----

[](#usage)

Using Omega Search is easy. Take a look at the following example.

```
use \JordJD\OmegaSearch\OmegaSearch;

// Setup your database connection.
// If you already have a connection setup, you can skip this step.
$pdo = new PDO('mysql:dbname=database_name;host=127.0.0.1', 'username', 'password');

// Create a new Omega Search object
$search = new OmegaSearch;

// Configure the Omega Search object
$search->setDatabaseConnection($pdo)
       ->setTable('products')
       ->setPrimaryKey('product_groupid')
       ->setFieldsToSearch(['product_name', 'product_description', 'product_seokeywords'])
       ->setConditions(['product_live' => 1]);

// Perform a search for 'test product', limited to top 10 results
$results = $search->query('test product', 10);

// Output results
var_dump($results);
```

The results are returned as a `SearchResults` object, as shown below, containing an array of `SearchResult` objects. This `SearchResults` object also contains various statistics such as the highest, lowest and average relevances, and the time taken to perform the search.

Each `SearchResult` object in the array provides the primary key `id` and its `relevance`. The `relevance` is simply a number that is higher on more relevant results. The array is sorted by relevance descending.

```
object(JordJD\OmegaSearch\SearchResults)#731 (5) {
  ["results"]=>
  array(10) {
    [0]=>
    object(JordJD\OmegaSearch\SearchResult)#588 (2) {
      ["id"]=>
      int(80)
      ["relevance"]=>
      float(637.80198499153)
    }
    /** ... snipped ... */
    [9]=>
    object(JordJD\OmegaSearch\SearchResult)#597 (2) {
      ["id"]=>
      int(18469)
      ["relevance"]=>
      float(121.65783596237)
    }
  }
  ["highestRelevance"]=>
  float(637.80198499153)
  ["lowestRelevance"]=>
  float(121.65783596237)
  ["averageRelevance"]=>
  float(336.74613218217)
  ["time"]=>
  float(0.33661985397339)
}
```

### Overriding SQL

[](#overriding-sql)

If you wish to write your own SQL query instead of using the one generated, for example if you wish to join another table, you can use the `setSqlOverride` method. The query passed into this method must contain a `SELECT` and `LIMIT ? , ?`, an exception will be thrown otherwise. You can omit the `setFieldsToSearch` method when overriding the SQL.

Take a look at the following example:

```
use \JordJD\OmegaSearch\OmegaSearch;

// Setup your database connection.
// If you already have a connection setup, you can skip this step.
$pdo = new PDO('mysql:dbname=database_name;host=127.0.0.1', 'username', 'password');

// Create a new Omega Search object
$search = new OmegaSearch;

// Configure the Omega Search object
$search->setDatabaseConnection($pdo)
       ->setTable('products')
       ->setPrimaryKey('product_groupid')
       ->setConditions(['product_live' => 1])
       ->setSqlOverride('SELECT product_name, product_description, product_seokeywords FROM products LIMIT ? , ?');

// Perform a search for 'test product', limited to top 10 results
$results = $search->query('test product', 10);

// Output results
var_dump($results);
```

### Caching Source Data

[](#caching-source-data)

To speed up searching, you can cache the source data using any PSR-6 compliant cache pool. An example of this is shown below.

```
// Create cache pool
$filesystemAdapter = new Local(storage_path().'/search-cache/');
$filesystem = new Filesystem($filesystemAdapter);
$cacheItemPool = new FilesystemCachePool($filesystem);

// Set cache expiry time
$cacheExpiryInSeconds = 300;

// Create a new Omega Search object
$search = new OmegaSearch;

// Configure the Omega Search object
$search->setDatabaseConnection($pdo)
       ->setTable('products')
       ->setPrimaryKey('product_groupid')
       ->setFieldsToSearch(['product_name'])
       ->setCache($cacheItemPool, $cacheExpiryInSeconds); // Setup cache
```

###  Health Score

46

—

FairBetter than 93% of packages

Maintenance83

Actively maintained with recent releases

Popularity16

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 58.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~479 days

Recently: every ~599 days

Total

6

Last Release

87d ago

Major Versions

v3.0.0 → v4.0.02019-07-23

v4.1.0 → v5.0.02026-02-14

### Community

Maintainers

![](https://www.gravatar.com/avatar/c580cdf7c14898fff179cdfc1085892091d5d2f49d917873a12365af9ac77c93?d=identicon)[Jord-JD](/maintainers/Jord-JD)

---

Top Contributors

[![Jord-JD](https://avatars.githubusercontent.com/u/650645?v=4)](https://github.com/Jord-JD "Jord-JD (7 commits)")[![kirsty-gasston](https://avatars.githubusercontent.com/u/12949343?v=4)](https://github.com/kirsty-gasston "kirsty-gasston (3 commits)")[![NilesB](https://avatars.githubusercontent.com/u/7305403?v=4)](https://github.com/NilesB "NilesB (2 commits)")

---

Tags

fuzzy-searchphpphp-librarysearchsearch-engine

### Embed Badge

![Health badge](/badges/divineomega-omega-search/health.svg)

```
[![Health](https://phpackages.com/badges/divineomega-omega-search/health.svg)](https://phpackages.com/packages/divineomega-omega-search)
```

###  Alternatives

[mailerlite/laravel-elasticsearch

An easy way to use the official PHP ElasticSearch client in your Laravel applications.

934529.3k2](/packages/mailerlite-laravel-elasticsearch)[jeroen-g/explorer

Next-gen Elasticsearch driver for Laravel Scout.

397612.3k](/packages/jeroen-g-explorer)[swisnl/laravel-fulltext

Fulltext indexing and searching for Laravel

184104.5k6](/packages/swisnl-laravel-fulltext)[romanstruk/manticore-scout-engine

Laravel Manticore Scout Engine

4818.1k](/packages/romanstruk-manticore-scout-engine)[statamic-rad-pack/meilisearch

meilisearch search driver for Statamic

1661.7k](/packages/statamic-rad-pack-meilisearch)[internachi/blade-alpine-instantsearch

Algolia instant search as Blade/Alpine.js components

1940.9k](/packages/internachi-blade-alpine-instantsearch)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
