WooCommerce FULLTEXT + fuzzy Admin UI WP-CLI & Cron

Fuzzy Product Search — Dokumentation

Hurtig WooCommerce-søgning via dedikeret indeks-tabel (FULLTEXT) og robust fuzzy-fallback. Denne side dækker installation, shortcode, admin UI, indeksering, CLI, database, fejlfinding m.m.

1) Overblik

Hvad er det? Fuzzy Product Search giver hurtig og tolerant produktsøgning i WooCommerce ved at søge mod en forberedt indeks-tabel med FULLTEXT + en fuzzy fallback (fx “guin” → “gin”).

  • UI: Shortcode som inline søgefelt eller kun-ikon med fuldskærms overlay.
  • Automatik: Initial fuld indeksering ved aktivering, daglig reindex, og inkrementelle opdateringer ved produktændringer.
  • DevOps: WP-CLI-kommandoer + Cron events.
  • Sikkerhed: Forberedt SQL (prepared statements), whitelistet input, sikkert tabellenavn.

2) Krav & kompatibilitet

  • WordPress 5.8+ & WooCommerce
  • PHP 7.4+ (kompatibel med PHP 8)
  • MySQL/InnoDB med FULLTEXT (5.6+; anbefalet 8+ for hurtigere REGEXP)

3) Installation & opdatering

  1. Upload ZIP under Plugins → Tilføj nyt → Upload plugin.
  2. Aktivér plugin’et.
  3. Automatisk: En single WP-Cron event kører fuld initial indeksering kort efter aktivering.
Bemærk: Der planlægges også en daglig reindex (03:17 servertid).

WP-CLI (valgfrit)

wp fps install        # create table + full initial index
wp fps index --all    # full reindex
wp fps index --ids=12,34,56  # index specific product IDs

4) Hurtig start (shortcode)

AttributTypeDefaultBeskrivelse
placeholderstringSøg i produkter…Tekst i søgefeltet
limitint ≤ 5012Maks. antal resultater
min_charsint2Minimum antal tegn, før søgning starter
icon_only0|101 = kun 🔍 ikon → fuldskærms overlay

Inline søgebar

[fuzzy_product_search placeholder="Søg i produkter…" limit="12" min_chars="2" icon_only="0"]

Kun ikon + overlay

[fuzzy_product_search placeholder="Søg i produkter…" limit="12" min_chars="2" icon_only="1"]

5) Admin UI

Findes under WooCommerce → Fuzzy Search (fallback: Værktøjer). Her kan du:

  • Oprette indekstabellen
  • Kø (cron) eller køre fuld reindex nu
  • Indeksere specifikke produkt-ID’er
  • Se status (tabel findes, antal produkter/rækker, seneste reindex-tidspunkter)

6) Indeksering

  • Initial reindex: Kører automatisk kort efter aktivering.
  • Daglig reindex: WP-Cron kl. 03:17 (servertid).
  • Inkrementel: Hooks på opret/rediger/slet produkt & variation.
CLI-kommandoer
wp fps install
wp fps index --all
wp fps index --ids=12,34,56
Cron events
  • fps_initial_reindex_event – single run efter aktivering
  • fps_daily_reindex_event – daglig fuld reindex

7) Søgning & ranking

Søgningen kører som AJAX til en sikker handler og kombinerer:

  1. FULLTEXT (BOOLEAN MODE): vægtet titel (x3) > attributter (x2) > indhold (x1) + samlet felt-index.
  2. Fuzzy fallback: subsequence-REGEXP + Levenshtein + phonetik (metaphone) + SKU/substring-bonus.

Alle SQL-kald bruger $wpdb->prepare() og whitelisting. Søgestrenge begrænses i længde, og antal kandidater caps for at beskytte performance.

8) Database (schema)

CREATE TABLE `wp_product_search_index` (
  product_id BIGINT UNSIGNED NOT NULL,
  title_text TEXT NOT NULL,
  content_text MEDIUMTEXT NULL,
  attributes_text MEDIUMTEXT NULL,
  sku VARCHAR(200) NULL,
  categories_text TEXT NULL,
  tags_text TEXT NULL,
  updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (product_id),
  KEY idx_sku (sku),
  FULLTEXT KEY ft_title (title_text),
  FULLTEXT KEY ft_content (content_text),
  FULLTEXT KEY ft_attributes (attributes_text),
  FULLTEXT KEY ft_all (title_text, content_text, attributes_text, categories_text, tags_text, sku)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

Plugin’et opretter tabellen automatisk. Der medfølger også rene SQL-scripts i plugin-mappen /sql.

9) Tilpasning

Styling

Frontend bruger BEM-lignende klasser, som du kan overskrive i dit tema: .fuzzy-product-search, .fps-input, .fps-results, .fps-item, .fps-overlay m.fl.

Programmatisk API (udviklere)

  • \FPS\Indexer::create_table()
  • \FPS\Indexer::index_all()
  • \FPS\Indexer::index_product( $post_id )

10) Fejlfinding

Ingen resultater?
  • Kør wp fps install eller wp fps index --all for at sikre at tabellen er fyldt.
  • Ryd cache/minify (optimeringsplugins).
  • Kontrollér at produkter/variationer er publish.
Overlay dækker ikke alt?

Plugin’et bruger ekstrem høj z-index: 2147483647. Tjek at andre fixed-elementer ikke sætter endnu højere værdier.

Langsom første søgning?

På meget store kataloger kan første fuzzy fallback være dyr. Overvej MySQL 8, og lad den daglige reindex køre uden spidsbelastning.

11) FAQ

Matcher den “guin” til “gin”? Ja — via fuzzy-laget (subsequence, Levenshtein, phonetik) og re-scoring.

Skal jeg manuelt fylde tabellen? Nej — initial indeksering kører selv efter aktivering, plus dagligt & ved ændringer.

Virker det med variationer? Ja — variationstitler og attributter indgår i indekset.

Kan jeg køre reindex fra admin? Ja — under WooCommerce → Fuzzy Search.

12) Licens, changelog & support

Licens: GPLv2 eller senere.

Changelog (uddrag)

  • 1.4.0 – Admin UI; automatisk initial indeksering via single event; dok opdateret.
  • 1.3.x – Fuzzy forbedringer; overlay-UI; sikkerhedshærdning.
  • 1.2.x – FULLTEXT-indeks; shortcode; AJAX-søgning.

Support: Opret et issue/PR eller kontakt os – vi hjælper gerne med onboarding og tilpasning.

© • Fuzzy Product Search · WooCommerce · FULLTEXT + fuzzy