=== CelerSearch - Lightning Fast Search with Meilisearch ===
Contributors: darkog, celersearch
Tags: search, meilisearch, typesense, instant search, autocomplete
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 8.1
Stable tag: 1.4.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

⚡ Instant, typo-tolerant WordPress search powered by Meilisearch. Autocomplete, highlighting, faceted filters, WooCommerce-ready.

== Description ==

CelerSearch routes WordPress search through Meilisearch. Sub-50ms responses, typo tolerance, autocomplete, highlighting, and full WooCommerce support — with an admin UI built for day-to-day use, not just setup.

= 🔍 Search =

* Millisecond results on any site size
* Typo tolerance and stemming out of the box
* Live autocomplete as users type
* Match highlighting on titles and excerpts
* Category, tag, and custom-taxonomy filtering
* Custom search results pages via Views + block/shortcode
* Native WordPress search fallback when Meilisearch is unreachable

= 🗂 Indexing =

* Posts, pages, any custom post type
* WooCommerce products (including variations) and orders
* Real-time sync on publish, update, trash, and watched meta changes
* Manual rebuild with configurable batch size
* Per-index searchable, filterable, sortable attributes + synonyms — all editable in the admin
* Content splitting for long posts (configurable; Meilisearch deduplicates results)

= 🌐 Where search runs =

* Frontend site search (replace the default results page with a custom View)
* Admin list search (posts, products, media)
* REST API search (headless/decoupled setups)
* AJAX-faceted WooCommerce shop & archive filters

= 🎯 Use cases =

* **WooCommerce stores with thousands of orders** — native admin order search slows to a crawl and misses matches as the orders table grows. Enable the "WooCommerce Admin Orders Search" area and lookups stay instant at any scale.
* **Product catalogs with rich attributes** — drive shop and category archives with AJAX-faceted filters for color, size, brand, price, plus typo-tolerant keyword search.
* **Content-heavy sites (news, blogs, documentation)** — replace the frontend search with live autocomplete and fuzzy matching so readers find posts by typing a few characters.
* **Custom post types at scale** — directories, job boards, listings. Native WP search is a slow `LIKE '%…%'` across a handful of columns; CelerSearch indexes every field and ranks by relevance.

= 🧑‍💻 Developer-friendly =

* 40+ filter hooks across indexing, search, and results
* Extend with your own index types (`celersearch_supported_indices`)
* Custom search-area types (`celersearch_area_types`) for BuddyPress, LearnDash, etc.
* Taxonomy-aware queries translate WP_Query `tax_query` to the engine filter syntax

Full documentation at [docs.celersearch.com](https://docs.celersearch.com).

= Requirements =

* WordPress 6.0+
* PHP 8.1+
* A Meilisearch instance — self-host on your VPS, or get a managed one at [celersearch.com](https://celersearch.com/) from $10/mo.

= 🚀 Getting started =

After activation a welcome notice points you to the setup flow:

1. Stand up Meilisearch — self-host ([guide](https://www.meilisearch.com/docs/learn/self_hosted/getting_started_with_self_hosted_meilisearch)) or use [celersearch.com](https://celersearch.com/)
2. Add the service under **CelerSearch → Services**
3. Create an index under **CelerSearch → Indices** and rebuild it
4. Enable the relevant search area under **CelerSearch → Settings**

== Installation ==

1. Upload the `celersearch` folder to the `/wp-content/plugins/` directory
2. Activate the plugin through the 'Plugins' menu in WordPress
3. Configure your MeiliSearch service under CelerSearch > Services
4. Create indices and configure search areas

== Frequently Asked Questions ==

= Do I need my own Meilisearch server? =

Yes. Two options:

* **Self-host** on your VPS — free, but you handle updates, backups, and SSL. [Upstream guide](https://www.meilisearch.com/docs/learn/self_hosted/getting_started_with_self_hosted_meilisearch).
* **Managed** at [celersearch.com](https://celersearch.com/) — from $10/mo, provisioned in seconds, updates and backups handled.

= Does it work with WooCommerce? =

Yes. Dedicated Products and Orders index types, plus AJAX-faceted shop & archive filters.

= Will it slow down my site? =

No. Search queries go to Meilisearch, which responds in under 50ms.

= What if Meilisearch goes down? =

With fallback enabled (default), search reverts to native WordPress search automatically.

= Can I disable content splitting for large posts? =

Yes. Open **CelerSearch → Indices**, edit the index, and toggle **Content Splitting** (chunk size is configurable per index).

For site-wide overrides you can also set these in `wp-config.php`:

`define( 'CELERSEARCH_SPLIT_POSTS', false );`
`define( 'CELERSEARCH_CONTENT_MAX_SIZE', 3000 );`

Rebuild the affected indices after changing either.

= How do I replace the default search results page? =

1. **CelerSearch → Views** — create a View, pick an index, configure behavior.
2. Create a WordPress page and embed the View via the CelerSearch block or `[celersearch]` shortcode.
3. **CelerSearch → Settings → Search Areas** — on "WordPress Public Search", enable "Replace Search Results Page" and pick the page.

= What's the difference between Search Areas and Views? =

They solve different problems and often work together.

* **Search Areas** (Settings → Search Areas) intercept WordPress search *where it already happens* — the frontend search, admin list search, REST API search, WooCommerce shop filters — and route it through Meilisearch. No template changes; you pick which index each context uses.
* **Views** (CelerSearch → Views) are a UI primitive for building custom search experiences you embed via the CelerSearch block or the `[celersearch]` shortcode. A View bundles the input, autocomplete, filters, results layout, and sorting as one configurable unit you drop onto any page or widget area.

Typical setup uses both: create a View-powered search page, then enable "Replace Search Results Page" on the WordPress Public Search area and point it at that page — the Search Area handles the interception, the View renders the page.

== Screenshots ==

1. Service create page
2. Services index page
3. Index create page
4. Indices index page
5. Index settings modal
6. Index browser - See what's in the index and preview the documents structure
7. Views creation and embed to public page
8. Plugin settings
9. Search Area configuration - WooCommerce product search
10. Search Area configuration - Swap public WordPress search with CelerSearch based search

== Changelog ==

= 1.4.1 =

* Add per-item Import/Export for Indices, Services and Settings — JSON envelope format, slug/name dedup on import, API keys redacted by default with explicit opt-in to embed
* Add WP-CLI commands: `wp celersearch index|service|settings export|import`
* Fix: `wp celersearch index list|info|clear` no longer fatals on the success path (used a non-existent `is_success()` helper)

= 1.4.0 =

* Add first-run welcome notice
* Add host-options picker to the Services empty state and Create Service modal
* Add per-index settings UI for searchable, filterable, sortable attributes and synonyms
* Add Index Browser modal with in-engine search, filters, and index configuration
* Add row-level action menus, toast notifications, reusable confirmation modals, and admin footer polish
* Improve: frontend search-view and WooCommerce shop-filter typography now scales with the theme's font size
* Fix: MultiSelect dropdowns inside modals no longer get clipped by the modal edge
* Fix: Indices page no longer fatals when an index references a deleted service
* Fix: admin assets enqueue with exact page-slug match, avoiding leakage onto third-party admin pages
* Fix: admin modals correctly center and align with the WP admin content area
* Tested and ready for WordPress 7.0

= 1.3.1 =

* Fix: Defer translation of index type labels to avoid the "translation loading triggered too early" notice on WordPress 6.7+

= 1.3.0 =

* Fix: Ensure Meilisearch indexes are created with correct primary key and settings before first sync
* Fix: Provision index with filterable attributes on creation, preventing empty search results
* Fix: Detect and automatically clean up stuck Action Scheduler sync jobs
* Add content splitting as a per-index setting (enable/disable and max record size)
* Add sync error logging visible to admins via AJAX endpoints
* Improve documents column to clarify indexed vs local counts when content splitting is active

= 1.2.4 =

* Fix: URL based search query does not persist in search page
* Fix: CelerSearch menu registers for non-admin users too in wp-admin

= 1.2.3 =

* Respect initial_display setting when search input is cleared in Views

= 1.2.2 =

* Add sorting option in Views and Search areas

= 1.2.1 =

* Fix post splitting / deduplication

= 1.2.0 =

* Add on-demand service health checks from Services page
* Add index document count stats on Indices page
* Fix deleting an index now also removes it from the remote search engine
* Improve service creation form and status display

= 1.1.3 =

* Minor bug fix related to product indexing

= 1.1.2 =

* Improve bundling process
* Add option "Replace Search Results Page" with selected page that embeds View via Block or shortcode in Search area settings for "WordPress Public Search" type
* Add filter celersearch_view_search_hit for adding additional data to the hits response
* Improve UI in view form

= 1.1.1 =

* Improve build process
* Fix admin page icon

= 1.1.0 =

* Add WooCommerce integration
* Add Views
* Improved code quality
* Improved UI/UX


= 1.0.4 =
* Add celersearch as committer
* Add Confirmation for reindex operation
* Fix WooCoomerce order index thumbnail
* Fix Autocomplete dialog result display HTML escaped strings

= 1.0.3 =
* Add WooCommerce Orders index
* Improved code quality

= 1.0.2 =
* Improved code quality

= 1.0.1 =
* Fixed minor bugs

= 1.0.0 =
* Initial release

== Upgrade Notice ==

