Repository files navigation





SEAL Logo with an abstract seal sitting on a telescope.
Logo created by Meine Wilma

SEAL

Monorepository for SEAL a Search Engine Abstraction Layer with support to different search engines
Documentation | Packages

Elasticsearch | Opensearch | Meilisearch | Algolia | Loupe | Solr | Redisearch | Typesense
PHP | Symfony | Laravel | Spiral | Mezzio | Yii



👋 Introduction

The SEAL project is a PHP library designed to simplify the process of interacting with different search engines. It provides a straightforward interface that enables users to communicate with various search engines, including:

It also provides integration packages for the

Symfony, Laravel, Spiral, Mezzio and Yii PHP frameworks.

It is worth noting that the project draws inspiration from the Doctrine and Flysystem projects. These two projects have been a great inspiration in the development of SEAL, as they provide excellent examples of how to create consistent and user-friendly APIs for complex systems.

Note: This project is heavily under development and any feedback is greatly appreciated.

🏗️ Structure

SEAL Structure overview

SEAL's provides a basic abstraction layer for add, remove and search and filters for documents. The main class and service handling this is called Engine, which is responsible for all this things. The Schema which is required defines the different Indexes and their Fields.

The project provides different Adapters which the Engine uses to communicate with the different Search Engine software and services. This way it is easy to switch between different search engine software and services.

Glossary

TermDefinition
EngineThe main class and service responsible to provide the basic interface for add, remove and search and filters for documents.
SchemaDefines the different Indexes and their Fields, for every field a specific type need to be defined and what you want todo with them via flags like searchable, filterable and sortable.
AdapterProvides the communication between the Engine and the Search Engine software and services.
DocumentsA structure of data that you want to index need to follow the structure of the fields of the index schema.
Search EngineSearch Engine software or service where the data will actually be stored currently Meilisearch, Opensearch, Elasticsearch, Algolia, Redisearch, Solr and Typesense is supported.

📖 Installation and Documentation

The documentation is available at https://php-cmsig.github.io/search/. It is the recommended and best way to start using the library, it will step-by-step guide you through all the features of the library.

📦 Packages

Full list of packages provided by the SEAL project:

Have also a look at the following tags:

Usages

The following open source projects are using SEAL:

You are using SEAL? Let us know.

🦑 Similar Projects

The following projects in the past target a similar problem:

📩 Authors

About

Search abstraction over different search engines written in PHP. Currently implemented Elasticsearch, Opensearch, Algolia, Meilisearch, Loupe, RediSearch, Solr, Typesense. Documentation: https://php-cmsig.github.io/search/

Topics

Resources

Security policy

Stars

440 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation





SEAL Logo with an abstract seal sitting on a telescope.
Logo created by Meine Wilma

SEAL

Monorepository for SEAL a Search Engine Abstraction Layer with support to different search engines
Documentation | Packages

Elasticsearch | Opensearch | Meilisearch | Algolia | Loupe | Solr | Redisearch | Typesense
PHP | Symfony | Laravel | Spiral | Mezzio | Yii



👋 Introduction

The SEAL project is a PHP library designed to simplify the process of interacting with different search engines. It provides a straightforward interface that enables users to communicate with various search engines, including:

It also provides integration packages for the

Symfony, Laravel, Spiral, Mezzio and Yii PHP frameworks.

It is worth noting that the project draws inspiration from the Doctrine and Flysystem projects. These two projects have been a great inspiration in the development of SEAL, as they provide excellent examples of how to create consistent and user-friendly APIs for complex systems.

Note: This project is heavily under development and any feedback is greatly appreciated.

🏗️ Structure

SEAL Structure overview

SEAL's provides a basic abstraction layer for add, remove and search and filters for documents. The main class and service handling this is called Engine, which is responsible for all this things. The Schema which is required defines the different Indexes and their Fields.

The project provides different Adapters which the Engine uses to communicate with the different Search Engine software and services. This way it is easy to switch between different search engine software and services.

Glossary

TermDefinition
EngineThe main class and service responsible to provide the basic interface for add, remove and search and filters for documents.
SchemaDefines the different Indexes and their Fields, for every field a specific type need to be defined and what you want todo with them via flags like searchable, filterable and sortable.
AdapterProvides the communication between the Engine and the Search Engine software and services.
DocumentsA structure of data that you want to index need to follow the structure of the fields of the index schema.
Search EngineSearch Engine software or service where the data will actually be stored currently Meilisearch, Opensearch, Elasticsearch, Algolia, Redisearch, Solr and Typesense is supported.

📖 Installation and Documentation

The documentation is available at https://php-cmsig.github.io/search/. It is the recommended and best way to start using the library, it will step-by-step guide you through all the features of the library.

📦 Packages

Full list of packages provided by the SEAL project:

Have also a look at the following tags:

Usages

The following open source projects are using SEAL:

You are using SEAL? Let us know.

🦑 Similar Projects

The following projects in the past target a similar problem:

📩 Authors

About

Search abstraction over different search engines written in PHP. Currently implemented Elasticsearch, Opensearch, Algolia, Meilisearch, Loupe, RediSearch, Solr, Typesense. Documentation: https://php-cmsig.github.io/search/

Topics

Resources

Security policy

Stars

440 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation





SEAL Logo with an abstract seal sitting on a telescope.
Logo created by Meine Wilma

SEAL

Monorepository for SEAL a Search Engine Abstraction Layer with support to different search engines
Documentation | Packages

Elasticsearch | Opensearch | Meilisearch | Algolia | Loupe | Solr | Redisearch | Typesense
PHP | Symfony | Laravel | Spiral | Mezzio | Yii



👋 Introduction

The SEAL project is a PHP library designed to simplify the process of interacting with different search engines. It provides a straightforward interface that enables users to communicate with various search engines, including:

It also provides integration packages for the

Symfony, Laravel, Spiral, Mezzio and Yii PHP frameworks.

It is worth noting that the project draws inspiration from the Doctrine and Flysystem projects. These two projects have been a great inspiration in the development of SEAL, as they provide excellent examples of how to create consistent and user-friendly APIs for complex systems.

Note: This project is heavily under development and any feedback is greatly appreciated.

🏗️ Structure

SEAL Structure overview

SEAL's provides a basic abstraction layer for add, remove and search and filters for documents. The main class and service handling this is called Engine, which is responsible for all this things. The Schema which is required defines the different Indexes and their Fields.

The project provides different Adapters which the Engine uses to communicate with the different Search Engine software and services. This way it is easy to switch between different search engine software and services.

Glossary

TermDefinition
EngineThe main class and service responsible to provide the basic interface for add, remove and search and filters for documents.
SchemaDefines the different Indexes and their Fields, for every field a specific type need to be defined and what you want todo with them via flags like searchable, filterable and sortable.
AdapterProvides the communication between the Engine and the Search Engine software and services.
DocumentsA structure of data that you want to index need to follow the structure of the fields of the index schema.
Search EngineSearch Engine software or service where the data will actually be stored currently Meilisearch, Opensearch, Elasticsearch, Algolia, Redisearch, Solr and Typesense is supported.

📖 Installation and Documentation

The documentation is available at https://php-cmsig.github.io/search/. It is the recommended and best way to start using the library, it will step-by-step guide you through all the features of the library.

📦 Packages

Full list of packages provided by the SEAL project:

Have also a look at the following tags:

Usages

The following open source projects are using SEAL:

You are using SEAL? Let us know.

🦑 Similar Projects

The following projects in the past target a similar problem:

📩 Authors

About

Search abstraction over different search engines written in PHP. Currently implemented Elasticsearch, Opensearch, Algolia, Meilisearch, Loupe, RediSearch, Solr, Typesense. Documentation: https://php-cmsig.github.io/search/

Topics

Resources

Security policy

Stars

440 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation





SEAL Logo with an abstract seal sitting on a telescope.
Logo created by Meine Wilma

SEAL

Monorepository for SEAL a Search Engine Abstraction Layer with support to different search engines
Documentation | Packages

Elasticsearch | Opensearch | Meilisearch | Algolia | Loupe | Solr | Redisearch | Typesense
PHP | Symfony | Laravel | Spiral | Mezzio | Yii



👋 Introduction

The SEAL project is a PHP library designed to simplify the process of interacting with different search engines. It provides a straightforward interface that enables users to communicate with various search engines, including:

It also provides integration packages for the

Symfony, Laravel, Spiral, Mezzio and Yii PHP frameworks.

It is worth noting that the project draws inspiration from the Doctrine and Flysystem projects. These two projects have been a great inspiration in the development of SEAL, as they provide excellent examples of how to create consistent and user-friendly APIs for complex systems.

Note: This project is heavily under development and any feedback is greatly appreciated.

🏗️ Structure

SEAL Structure overview

SEAL's provides a basic abstraction layer for add, remove and search and filters for documents. The main class and service handling this is called Engine, which is responsible for all this things. The Schema which is required defines the different Indexes and their Fields.

The project provides different Adapters which the Engine uses to communicate with the different Search Engine software and services. This way it is easy to switch between different search engine software and services.

Glossary

TermDefinition
EngineThe main class and service responsible to provide the basic interface for add, remove and search and filters for documents.
SchemaDefines the different Indexes and their Fields, for every field a specific type need to be defined and what you want todo with them via flags like searchable, filterable and sortable.
AdapterProvides the communication between the Engine and the Search Engine software and services.
DocumentsA structure of data that you want to index need to follow the structure of the fields of the index schema.
Search EngineSearch Engine software or service where the data will actually be stored currently Meilisearch, Opensearch, Elasticsearch, Algolia, Redisearch, Solr and Typesense is supported.

📖 Installation and Documentation

The documentation is available at https://php-cmsig.github.io/search/. It is the recommended and best way to start using the library, it will step-by-step guide you through all the features of the library.

📦 Packages

Full list of packages provided by the SEAL project:

Have also a look at the following tags:

Usages

The following open source projects are using SEAL:

You are using SEAL? Let us know.

🦑 Similar Projects

The following projects in the past target a similar problem:

📩 Authors

About

Search abstraction over different search engines written in PHP. Currently implemented Elasticsearch, Opensearch, Algolia, Meilisearch, Loupe, RediSearch, Solr, Typesense. Documentation: https://php-cmsig.github.io/search/

Topics

Resources

Security policy

Stars

440 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation





SEAL Logo with an abstract seal sitting on a telescope.
Logo created by Meine Wilma

SEAL

Monorepository for SEAL a Search Engine Abstraction Layer with support to different search engines
Documentation | Packages

Elasticsearch | Opensearch | Meilisearch | Algolia | Loupe | Solr | Redisearch | Typesense
PHP | Symfony | Laravel | Spiral | Mezzio | Yii



👋 Introduction

The SEAL project is a PHP library designed to simplify the process of interacting with different search engines. It provides a straightforward interface that enables users to communicate with various search engines, including:

It also provides integration packages for the

Symfony, Laravel, Spiral, Mezzio and Yii PHP frameworks.

It is worth noting that the project draws inspiration from the Doctrine and Flysystem projects. These two projects have been a great inspiration in the development of SEAL, as they provide excellent examples of how to create consistent and user-friendly APIs for complex systems.

Note: This project is heavily under development and any feedback is greatly appreciated.

🏗️ Structure

SEAL Structure overview

SEAL's provides a basic abstraction layer for add, remove and search and filters for documents. The main class and service handling this is called Engine, which is responsible for all this things. The Schema which is required defines the different Indexes and their Fields.

The project provides different Adapters which the Engine uses to communicate with the different Search Engine software and services. This way it is easy to switch between different search engine software and services.

Glossary

TermDefinition
EngineThe main class and service responsible to provide the basic interface for add, remove and search and filters for documents.
SchemaDefines the different Indexes and their Fields, for every field a specific type need to be defined and what you want todo with them via flags like searchable, filterable and sortable.
AdapterProvides the communication between the Engine and the Search Engine software and services.
DocumentsA structure of data that you want to index need to follow the structure of the fields of the index schema.
Search EngineSearch Engine software or service where the data will actually be stored currently Meilisearch, Opensearch, Elasticsearch, Algolia, Redisearch, Solr and Typesense is supported.

📖 Installation and Documentation

The documentation is available at https://php-cmsig.github.io/search/. It is the recommended and best way to start using the library, it will step-by-step guide you through all the features of the library.

📦 Packages

Full list of packages provided by the SEAL project:

Have also a look at the following tags:

Usages

The following open source projects are using SEAL:

You are using SEAL? Let us know.

🦑 Similar Projects

The following projects in the past target a similar problem:

📩 Authors

About

Search abstraction over different search engines written in PHP. Currently implemented Elasticsearch, Opensearch, Algolia, Meilisearch, Loupe, RediSearch, Solr, Typesense. Documentation: https://php-cmsig.github.io/search/

Topics

Resources

Security policy

Stars

440 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation





SEAL Logo with an abstract seal sitting on a telescope.
Logo created by Meine Wilma

SEAL

Monorepository for SEAL a Search Engine Abstraction Layer with support to different search engines
Documentation | Packages

Elasticsearch | Opensearch | Meilisearch | Algolia | Loupe | Solr | Redisearch | Typesense
PHP | Symfony | Laravel | Spiral | Mezzio | Yii



👋 Introduction

The SEAL project is a PHP library designed to simplify the process of interacting with different search engines. It provides a straightforward interface that enables users to communicate with various search engines, including:

It also provides integration packages for the

Symfony, Laravel, Spiral, Mezzio and Yii PHP frameworks.

It is worth noting that the project draws inspiration from the Doctrine and Flysystem projects. These two projects have been a great inspiration in the development of SEAL, as they provide excellent examples of how to create consistent and user-friendly APIs for complex systems.

Note: This project is heavily under development and any feedback is greatly appreciated.

🏗️ Structure

SEAL Structure overview

SEAL's provides a basic abstraction layer for add, remove and search and filters for documents. The main class and service handling this is called Engine, which is responsible for all this things. The Schema which is required defines the different Indexes and their Fields.

The project provides different Adapters which the Engine uses to communicate with the different Search Engine software and services. This way it is easy to switch between different search engine software and services.

Glossary

TermDefinition
EngineThe main class and service responsible to provide the basic interface for add, remove and search and filters for documents.
SchemaDefines the different Indexes and their Fields, for every field a specific type need to be defined and what you want todo with them via flags like searchable, filterable and sortable.
AdapterProvides the communication between the Engine and the Search Engine software and services.
DocumentsA structure of data that you want to index need to follow the structure of the fields of the index schema.
Search EngineSearch Engine software or service where the data will actually be stored currently Meilisearch, Opensearch, Elasticsearch, Algolia, Redisearch, Solr and Typesense is supported.

📖 Installation and Documentation

The documentation is available at https://php-cmsig.github.io/search/. It is the recommended and best way to start using the library, it will step-by-step guide you through all the features of the library.

📦 Packages

Full list of packages provided by the SEAL project:

Have also a look at the following tags:

Usages

The following open source projects are using SEAL:

You are using SEAL? Let us know.

🦑 Similar Projects

The following projects in the past target a similar problem:

📩 Authors

About

Search abstraction over different search engines written in PHP. Currently implemented Elasticsearch, Opensearch, Algolia, Meilisearch, Loupe, RediSearch, Solr, Typesense. Documentation: https://php-cmsig.github.io/search/

Topics

Resources

Security policy

Stars

440 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation





SEAL Logo with an abstract seal sitting on a telescope.
Logo created by Meine Wilma

SEAL

Monorepository for SEAL a Search Engine Abstraction Layer with support to different search engines
Documentation | Packages

Elasticsearch | Opensearch | Meilisearch | Algolia | Loupe | Solr | Redisearch | Typesense
PHP | Symfony | Laravel | Spiral | Mezzio | Yii



👋 Introduction

The SEAL project is a PHP library designed to simplify the process of interacting with different search engines. It provides a straightforward interface that enables users to communicate with various search engines, including:

It also provides integration packages for the

Symfony, Laravel, Spiral, Mezzio and Yii PHP frameworks.

It is worth noting that the project draws inspiration from the Doctrine and Flysystem projects. These two projects have been a great inspiration in the development of SEAL, as they provide excellent examples of how to create consistent and user-friendly APIs for complex systems.

Note: This project is heavily under development and any feedback is greatly appreciated.

🏗️ Structure

SEAL Structure overview

SEAL's provides a basic abstraction layer for add, remove and search and filters for documents. The main class and service handling this is called Engine, which is responsible for all this things. The Schema which is required defines the different Indexes and their Fields.

The project provides different Adapters which the Engine uses to communicate with the different Search Engine software and services. This way it is easy to switch between different search engine software and services.

Glossary

TermDefinition
EngineThe main class and service responsible to provide the basic interface for add, remove and search and filters for documents.
SchemaDefines the different Indexes and their Fields, for every field a specific type need to be defined and what you want todo with them via flags like searchable, filterable and sortable.
AdapterProvides the communication between the Engine and the Search Engine software and services.
DocumentsA structure of data that you want to index need to follow the structure of the fields of the index schema.
Search EngineSearch Engine software or service where the data will actually be stored currently Meilisearch, Opensearch, Elasticsearch, Algolia, Redisearch, Solr and Typesense is supported.

📖 Installation and Documentation

The documentation is available at https://php-cmsig.github.io/search/. It is the recommended and best way to start using the library, it will step-by-step guide you through all the features of the library.

📦 Packages

Full list of packages provided by the SEAL project:

Have also a look at the following tags:

Usages

The following open source projects are using SEAL:

You are using SEAL? Let us know.

🦑 Similar Projects

The following projects in the past target a similar problem:

📩 Authors

About

Search abstraction over different search engines written in PHP. Currently implemented Elasticsearch, Opensearch, Algolia, Meilisearch, Loupe, RediSearch, Solr, Typesense. Documentation: https://php-cmsig.github.io/search/

Topics

Resources

Security policy

Stars

440 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation





SEAL Logo with an abstract seal sitting on a telescope.
Logo created by Meine Wilma

SEAL

Monorepository for SEAL a Search Engine Abstraction Layer with support to different search engines
Documentation | Packages

Elasticsearch | Opensearch | Meilisearch | Algolia | Loupe | Solr | Redisearch | Typesense
PHP | Symfony | Laravel | Spiral | Mezzio | Yii



👋 Introduction

The SEAL project is a PHP library designed to simplify the process of interacting with different search engines. It provides a straightforward interface that enables users to communicate with various search engines, including:

It also provides integration packages for the

Symfony, Laravel, Spiral, Mezzio and Yii PHP frameworks.

It is worth noting that the project draws inspiration from the Doctrine and Flysystem projects. These two projects have been a great inspiration in the development of SEAL, as they provide excellent examples of how to create consistent and user-friendly APIs for complex systems.

Note: This project is heavily under development and any feedback is greatly appreciated.

🏗️ Structure

SEAL Structure overview

SEAL's provides a basic abstraction layer for add, remove and search and filters for documents. The main class and service handling this is called Engine, which is responsible for all this things. The Schema which is required defines the different Indexes and their Fields.

The project provides different Adapters which the Engine uses to communicate with the different Search Engine software and services. This way it is easy to switch between different search engine software and services.

Glossary

TermDefinition
EngineThe main class and service responsible to provide the basic interface for add, remove and search and filters for documents.
SchemaDefines the different Indexes and their Fields, for every field a specific type need to be defined and what you want todo with them via flags like searchable, filterable and sortable.
AdapterProvides the communication between the Engine and the Search Engine software and services.
DocumentsA structure of data that you want to index need to follow the structure of the fields of the index schema.
Search EngineSearch Engine software or service where the data will actually be stored currently Meilisearch, Opensearch, Elasticsearch, Algolia, Redisearch, Solr and Typesense is supported.

📖 Installation and Documentation

The documentation is available at https://php-cmsig.github.io/search/. It is the recommended and best way to start using the library, it will step-by-step guide you through all the features of the library.

📦 Packages

Full list of packages provided by the SEAL project:

Have also a look at the following tags:

Usages

The following open source projects are using SEAL:

You are using SEAL? Let us know.

🦑 Similar Projects

The following projects in the past target a similar problem:

📩 Authors

About

Search abstraction over different search engines written in PHP. Currently implemented Elasticsearch, Opensearch, Algolia, Meilisearch, Loupe, RediSearch, Solr, Typesense. Documentation: https://php-cmsig.github.io/search/

Topics

Resources

Security policy

Stars

440 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages