Download the PHP package waaseyaa/search without Composer

On this page you can find all versions of the php package waaseyaa/search. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package search

waaseyaa/search

Layer 3 — Services

Full-text and structured search for Waaseyaa applications.

Provides a search index abstraction and query builder for finding entities across types. The FTS5 implementation indexes a fixed title/body document, supports faceting and relevance ranking, preserves Indigenous orthography in tokenization, and performs bounded access-filtered pagination. Entities become documents either by implementing SearchIndexableInterface themselves or — for ordinary content such as node — through the search-owned entity projection contract (see below). The principal-safe read surface is consumed by /api/content/search and MCP content.search.

Key classes: SearchRequest, SearchResult, SearchProviderInterface.

Principal-safe read surface

The provider, request/result DTOs, and candidate projection contracts are a public Layer-3 service surface. Every read requires an explicit immutable AuthorizationPrincipalInterface; adapters cannot rely on ambient request state or omit the actor. The default resolver reloads the canonical served entity, proves entity view, and regenerates its search projection inside the principal's field-read scope before the candidate can affect a hit, count, facet, rank, snippet, filter, or page boundary.

FTS5 is only a bounded candidate generator. Returned values and aggregates are derived exclusively from the principal-safe projection. One ordered statement reads at most 1,001 raw pointers; the last pointer is only a truncation sentinel, and at most 1,000 candidates are resolved. When that sentinel is present, SearchResult::isComplete is false. Totals, pages, facets, filters, and non-relevance sorts then describe only the principal-safe matches inside that raw relevance window. An exhausted window can therefore return zero visible hits with isComplete: false when every inspected candidate is denied or filtered; the flag is a coarse work-bound signal, not evidence that the caller may access an omitted candidate. The entity resolver safely truncates authorized title and body text to 512 characters and 64 KiB respectively. SearchResult deliberately omits server duration so the API does not amplify protected-index cardinality as response data. Ordinary end-to-end latency remains a weak residual channel and must not be logged or exposed at per-query granularity on a public adapter.

Non-entity content is default-denied. Applications may contribute a resolver for an exact document-id namespace; that resolver must load its own canonical source and return a principal-safe projection. Source namespaces cannot collide with registered entity type IDs, including after registry construction. Entity projections normalize and bound authorized strings, topics, and quality scores so benign source variance cannot make otherwise viewable content disappear. The indexed entity_type, source_name, or other metadata never grants publicness.

A malformed index pointer or thrown application projection failure drops only that candidate and emits a content-free warning; it cannot fail the whole query or place exception messages, document IDs, or raw index values in logs. Resolvers return null for ordinary access denial and deliberately malformed shapes without logging, so logs cannot become an authorization oracle.

SearchContentCatalogueInterface is the companion resource-discovery/read contract. Its FTS5 implementation scans at most 500 protected pointers and returns at most 50 principal-safe projections per page, plus an optional scan-position resume for sealed MCP cursors (#2636). It publishes no raw count or hidden path. Direct public-path lookup treats the indexed URL only as a candidate and returns it only when the canonical principal-safe projection byte-matches that path. This is discovery, not a complete inventory: a resource omitted from the window remains directly readable by canonical URI. More than 50 stale/raw pointers sharing one public path conservatively makes that path unreadable if the valid candidate falls outside the direct-read bound.

The Twig helper remains @internal because no first-party Twig environment uses it; even that adapter requires an explicit principal. The write-side indexer remains live for existing consumers. The unused SearchIndexJob was deleted; asynchronous indexing must wait for a production queue consumer rather than publishing an undrained message.

Entity search projection (#2270)

Core content entities cannot depend upward on waaseyaa/search, so node never implements SearchIndexableInterface. The projection contract closes that gap from the search side:

Read-level mechanics are the indexing filter. Index-time projection runs without an account scope, so only FieldReadLevel::Public fields release values; a Protected or unclassified (Internal-defaulted) field throws on read, the default projector omits that field's text, and protected content never enters the index file at all. At query time the same projector runs inside the acting principal's field-read scope after the entity view check, so per-principal field grants apply and the re-generated document id must round-trip the index pointer. A projector may instead let the denial propagate — the resolver then drops the whole candidate fail-closed (the strict variant); the default node projector uses per-field omission, mirroring ResourceSerializer. Practical consequence: a bundle's body must be classified read: public in its field definition to be searchable; unclassified bundle fields fail closed to Internal and are silently omitted.

Unpublished content is indexed (the index is a protected datastore; reads are gated per principal at query time, and a draft resolves to nothing for principals without view access — indistinguishable from absence). The lifecycle subscriber still re-sources saves from the served base row, so forward-draft revisions never enter the index, and deletion removes the projected document even though the entity is not SearchIndexableInterface.

Field text is untrusted CMS data: Projection\SearchTextNormalizer drops script/style/template payloads and comments with their content, strips remaining markup with word boundaries preserved, decodes entities, scrubs re-introduced angle brackets, repairs invalid UTF-8, and collapses whitespace. Search text is data, never agent instructions.

Application override. Bind ProvidesEntitySearchProjectorsInterface in a service provider's register() (normal container contribution — no config closures, no service location):

Protected index trust boundary

Under the S1 SQLite topology, a separately configured search database is an optional, non-authoritative, rebuildable projection. It inherits the authoritative connection's path and PRAGMA refusal contract. Its file is protected and backed up until a verified search:reindex can deterministically rebuild it; it never becomes content authority merely because canonical content has not yet been reloaded.

search_index and search_metadata are a protected, derived datastore, not a public content cache. An application-supplied search projection can contain protected titles, bodies, URLs, topics, or other metadata, so the index inherits the strongest classification of any indexed value. Protect its database file, backups, replicas, diagnostics, and operator access to the same standard as canonical entity storage.

Only Fts5SearchIndexer writes the raw tables and only the access-checked Fts5SearchProvider and bounded Fts5SearchContentCatalogue read them. A repository architecture test enforces that inventory across first-party production PHP. Alternate providers, autocomplete/suggestion features, diagnostics, and ad-hoc readers are prohibited from querying the tables directly; they must enter through the access-checked search contract. The static inventory cannot recognize a deliberately obscured dynamic table name or a non-PHP operator script, so code review remains responsible for those evasions. Do not log raw candidates or pre-access counts. Search result caches must be scoped to the immutable acting principal and its claims generation; a shared result cache is a cross-principal disclosure.

The provider cannot be constructed without a candidate resolver. Unknown entity types and non-entity sources are denied by default; public files or synchronized corpora require an explicit, exact-namespace source resolver. Indexed metadata is never authority for declaring a source public.

Implementation gotchas


All versions of search with dependencies

PHP Build Version
Package Version
Requires php Version >=8.5
twig/twig Version ^3.0
waaseyaa/foundation Version ^0.1.0-alpha.308
waaseyaa/database-legacy Version ^0.1.0-alpha.308
waaseyaa/entity Version ^0.1.0-alpha.308
waaseyaa/entity-storage Version ^0.1.0-alpha.308
waaseyaa/access Version ^0.1.0-alpha.308
symfony/event-dispatcher Version ^7.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package waaseyaa/search contains the following files

Loading the files please wait ...