Download the PHP package edyjen/pecle-search without Composer

On this page you can find all versions of the php package edyjen/pecle-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 pecle-search

PecleSearch

Buscador por palabras con corrección silenciosa de errores de tecleo.

Estructura

Los tests se corren con composer install && vendor/bin/pest.

Core/ se puede usar sin Laravel implementando Contracts\TokenStore (el índice) e Contracts\IndexStore (caché del vocabulario) y alimentando un Indexer con EntitySources. Un test (ModuleIsolationTest) falla si Core/ importa algo de Laravel o del resto de la app.

Instalación

Mientras el repo sea privado, añadir antes a composer.json del proyecto:

Para desarrollar el paquete junto a un proyecto, usar { "type": "path", "url": "../pecle-search" }.

  1. El provider (Pecle\Search\Laravel\PecleSearchServiceProvider) se descubre solo.
  2. php artisan migrate (el paquete carga sus migraciones; son idempotentes si las tablas ya existen).
  3. Publicar la config si hace falta: php artisan vendor:publish --tag=pecle-search-config.
  4. Declarar los índices en config/pecle_search.php (ver config.php):

    Una columna puede venir de una relación con punto ('brand.name') o de una clave dentro de un atributo casteado a array/JSON ('address.state'). Para que el cambio de un modelo relacionado reindexe a sus dependientes, 'watch' => [['model' => Brand::class, 'foreign_key' => 'brand_id', 'attributes' => ['name']]]. Una fuente más compleja es una clase que implemente Core\Contracts\EntitySource.

  5. php artisan pecle-search:rebuild para la carga inicial (conviene una migración que lo llame al desplegar y un Schedule::command('pecle-search:rebuild') nocturno de respaldo).
  6. En las consultas: Product::query()->whereIndexed('products', $term, ['name', 'sku']). El tercer argumento es el respaldo (columnas para un LIKE, o una función) mientras el índice no esté construido. Para corregir antes: app(PecleSearchManager::class)->resolve($term, 'products') devuelve una Resolution (original, applied, corrected(), toArray()) para mostrar «Mostrando resultados para…».

Lo que mantiene el índice solo

IndexSynchronizer escucha saved/restored/deleted de los modelos de cada índice y reindexa esa entidad al confirmarse la transacción. No ve lo que se escriba sin eventos de Eloquent (DB::table(), ->update() masivo, importaciones en bloque): ahí hay que reconstruir (pecle-search:rebuild). El vocabulario del corrector se refresca con un job único con retraso, que agrupa ráfagas de cambios.

Interruptor

config('pecle_search.enabled') enciende o apaga la corrección. Un proyecto puede delegarlo en otra fuente (un parámetro editable en la interfaz) con PecleSearchManager::enableUsing(fn () => ...). Apagada solo la corrección: la búsqueda por palabras sigue funcionando.

Autocompletado

PecleSearchManager::suggest($texto, $indice, $limite) devuelve Suggestions (text, completion, corrected). El texto pasa primero por el corrector (si está encendido), así que "Algdon Gr" llega como "algodon Gr". Después:

Para sugerir los valores de una columna conviene un índice solo con esa columna (si no, el índice mezcla, p. ej., nombres y códigos). Necesita Contracts\CompletionStore (lo implementa DatabaseTokenStore); un Completer se puede usar sin Laravel con otra implementación.

Calibración pendiente

Las constantes del motor (alpha, radius, cost_per_char…) nacieron en un prototipo y no están calibradas contra errores de tecleo reales. El tope de costo aceptable por defecto es max(2, letras): con errores de una tecla corrige ~97 % bien; con una cadena aleatoria sobre un vocabulario de supermercado "corrige" ~8 %.

La etapa 2, por dentro

Una edición en la posición i deja intacto lo tecleado antes de i; como la palabra ya se sabe desconocida, solo se prueban las posiciones hasta donde lo tecleado todavía coincide con el comienzo de alguna palabra (poda exacta: EditStageTest la compara con probar todas las ediciones por fuerza bruta). Visita unas decenas de nodos; la capa 1 explora cientos.

Los costos (edits.* en config.php) se comparan con el de una sustitución (alpha × distancia entre teclas: 1,6 en la misma fila): los errores mecánicos típicos (letra repetida 1,0, dedo gordo 1,3, transposición 1,3, falta una letra 1,5) cuestan menos; la letra de más cualquiera (1,8) más. Tocar la primera letra o borrar la última sin que sea repetida lleva un recargo de 0,8. Gana el menor costo; con el mismo, el mejor rank. Atajo exacto: la capa 1 cuesta al menos una sustitución a la tecla más cercana (1,6), así que si la etapa 2 encuentra algo más barato la capa 1 ni se ejecuta (resultado idéntico, y es la parte cara).

edits.prefix_landing (encendido) deja que, si nada más corrige, la etapa 2 aterrice en el comienzo de una palabra: sirve para lo que se está escribiendo con un error ("jrse" mientras se escribe "jrsey"), a costa de cambiar más palabras legítimas que no están en el índice (según el vocabulario, +2 a +7 puntos). No puede distinguir una palabra a medio escribir de una completa que no existe, así que la interfaz debe avisar de la corrección y dejar buscar lo escrito. Se apaga con edits.prefix_landing = false.

Medir y calibrar

php artisan pecle-search:evaluate <índice> [--sample=400] [--seed=1] mide el corrector con el vocabulario real del índice: fabrica errores de tecleo de nueve tipos (sustitución por tecla vecina, doble, mano corrida, omisión, inserción, transposición, letra repetida, tecla vecina de más y letra doble con una menos) y compara varios topes de costo y márgenes de ambigüedad, con la etapa 2 encendida, apagada o las dos (--edits=on|off|both). Para cada configuración informa cuántos errores corrige bien, cuántos corrige mal y —lo más importante— cuántas palabras legítimas que no están en el índice cambia por error. Misma semilla, mismos errores.

pecle_search.log_corrections (o PECLE_SEARCH_LOG_CORRECTIONS) deja en el log cada corrección aplicada (pecle_search.corrected: lo escrito, lo buscado y su costo): son los errores de tecleo reales con los que contrastar lo medido con errores fabricados.


All versions of pecle-search with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
illuminate/support Version ^11.0|^12.0|^13.0
illuminate/database Version ^11.0|^12.0|^13.0
illuminate/cache Version ^11.0|^12.0|^13.0
illuminate/console Version ^11.0|^12.0|^13.0
illuminate/queue Version ^11.0|^12.0|^13.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 edyjen/pecle-search contains the following files

Loading the files please wait ...