Scry Search: Meilisearch for WordPress

Scry Search: Meilisearch for WordPress

5/5 (2 ratings) 20 active installs Updated Aug 7, 2026
Index Settings Dashboard - Manage post type indexes, view document counts, and trigger indexing operations

Index Settings Dashboard - Manage post type indexes, view document counts, and trigger indexing operations

Scry Search is built by developers for developers — but you don’t need to be one to run it.

If you can install a plugin and paste API keys, you can connect Meilisearch, pick post types, index content, tune ranking/filterable fields/synonyms/typo tolerance/weights, and turn on autosuggest from wp-admin. No theme edits required. Existing search forms keep working. WooCommerce products are a first-class post type.

If you are a developer, the same plugin is meant to be extended: scry_ms_* filters/actions, optional window.scrySearch, and a full hook reference in DOCS.md (GitHub). We use this kind of surface on client work and our own products, so the priorities are boring on purpose: stable hook names, easy-to-find call sites, a real docs file, and no forced frontend chrome.

Works from the admin (no code)

  • Connection Settings — URL and API keys, with a connection test
  • Index Settings — post types, searchable and filterable fields (including meta and taxonomies), ranking rules (including custom attribute:asc/desc), synonyms, stop words, dictionary, and typo tolerance; bulk index / wipe
  • Search Settings — post-type weights for federated search, optional autosuggest and matched-term highlighting
  • Task drawer, Logs, and Search Analytics for day-to-day ops

Site owners and agencies can go live without custom development. Developers can still hook in when a project needs it.

Headless: no frontend UI required

This plugin does not force a search UI on you. No required shortcode, widget, or results template.

What you get by default is indexing and Meilisearch-backed queries. Autosuggest and highlighting are optional and off unless you turn them on. Keep your theme’s search, or build your own UI against WP_Query / the autosuggest REST endpoint.

Drop-in WordPress search

Scry Search hooks posts_pre_query. Any WP_Query with a search string can go through Meilisearch (main search, programmatic queries, autosuggest) and still return normal WP_Post objects.

  • No theme rewrites, no forced shortcodes, no widget lock-in
  • search.php, searchform.php, core search widgets/blocks, and page-builder search elements keep working if you use them
  • Opt out per query with scry_ms_should_search when you need native WP search

Works with Elementor, Divi, Beaver Builder, and similar tools: whatever search box they output still hits WordPress search, which Scry Search routes to Meilisearch.

AJAX autosuggest (optional)

Enable Autosuggest under Scry Search Search Settings. The plugin attaches debounced AJAX to existing name="s" fields. Suggestions use the same Meilisearch indexes as full-site search. Optional CSS class selector so only the forms you choose get typeahead. Thumbnails supported when a featured image exists.

Shape the result data with scry_ms_autosuggest_results, or the rendered HTML with scry_ms_autosuggest_results_rendered. Leave autosuggest off to stay fully headless.

Per-post-type indexes and federated search

Index any registered post type independently — posts, pages, WooCommerce products, CPTs from other plugins. Each type gets its own Meilisearch index:

  • Searchable fields — titles, content, excerpts, taxonomies, author, custom meta (ACF, Meta Box, etc.)
  • Filterable fields — post type/status/author, post date, taxonomy IDs (taxonomies.<name>.id), and more for facets and advanced filters
  • Ranking rules — drag-and-drop reorder (words, typo, proximity, attribute, sort, exactness) plus custom attribute:asc / attribute:desc rules per index
  • Search weights — e.g. weight products above blog posts in the merged results

Search uses Meilisearch federated multi-search: indexes queried together, results merged and re-ranked with your per–post-type weights (not a hand-stitched PHP merge).

Relevancy, filtering, and language settings

Per index from the tabbed Index Settings dialog (or via filters):

  • Reorder built-in ranking rules and add custom ranking rules
  • Choose which attributes are searchable and which are filterable
  • Synonyms — nicknames, abbreviations, UK/US spelling, brand aliases
  • Stopwords — drop noise terms that shouldn’t affect ranking
  • Dictionary — keep acronyms and multi-word brand names from being split during tokenization
  • Typo tolerance — enable/disable, min word sizes, and disable on numbers, words, or attributes
  • View Raw JSON for each settings group when debugging

WooCommerce

Fully compatible. Select product in Index Settings, choose product fields and meta, set federation weights if you also search posts/pages. Catalog search upgrades; theme and checkout stay as they are. Same hooks as any other post type if you need custom product documents or autosuggest rows.

Search analytics

Scry Search Search Analytics:

  • Dashboard with summary metrics, charts, and recent searches
  • Optional IP anonymization / omit identifying fields
  • Retention period with daily WP-Cron cleanup, plus a manual “delete old events” button
  • CSV export of the analytics table (admin-only, nonce-protected)
  • Extra fields via scry_ms_analytics_event_to_insert (non-column keys go into search_metadata)

Task monitor

Task drawer on plugin admin screens:

  • Indexing tasks with status, duration, and errors
  • Paginated history
  • Scoped to indexes this plugin manages (shared Meilisearch instances won’t dump unrelated tasks)

Debug and error logs

Scry Search Logs:

  • Debug and Error levels, filterable in the viewer
  • Stored in the database, newest first, load-more paging
  • API keys / tokens redacted before storage
  • Retention + daily cleanup, or clean up on demand

Automatic and manual indexing

  • Auto-index on create/update; remove on trash/delete; re-index on untrash
  • One-click bulk index per post type
  • Wipe and rebuild when you need a clean slate
  • Live search preview from the indexes UI before you ship ranking changes

For developers: hooks and JS runtime

Admin covers setup and tuning. When you need custom behavior, use the public scry_ms_* PHP hooks and the optional window.scrySearch runtime. Call sites are marked //@HOOK: scry_ms_… in source.

Full argument lists, return types, timing, and JS examples: DOCS.md on GitHub (also shipped with the plugin).

Code is split into features/<name>/ packages. Prefer a search-only API key for front-end paths; the shared client factory supports admin vs search.

PHP filters

Indexing and documents:

  • scry_ms_should_index
  • scry_ms_should_delete
  • scry_ms_index_prepare_document
  • scry_ms_index_names
  • scry_ms_index_searchable_attributes
  • scry_ms_index_filterable_attributes
  • scry_ms_index_filterable_fields
  • scry_ms_index_typo_tolerance
  • scry_ms_bulk_index_query_args
  • scry_ms_bulk_index_batch_size
  • scry_ms_index_ranking_rules
  • scry_ms_index_fields
  • scry_ms_index_meta_keys

Index settings:

  • scry_ms_index_settings_ajax
  • scry_ms_index_settings_backup
  • scry_ms_index_ranking_rules_before_update
  • scry_ms_index_searchable_attributes_before_update
  • scry_ms_index_synonyms_before_update
  • scry_ms_index_stop_words_before_update
  • scry_ms_index_filterable_attributes_before_update
  • scry_ms_index_dictionary_before_update
  • scry_ms_index_typo_tolerance_before_update

Search and client:

  • scry_ms_should_search
  • scry_ms_meilisearch_client
  • scry_ms_multi_search_index_names
  • scry_ms_multi_search_query_params
  • scry_ms_multi_search_query
  • scry_ms_multi_search_queries
  • scry_ms_multi_search_federation
  • scry_ms_multi_search_raw_results
  • scry_ms_multi_search_final_results

Autosuggest, admin, analytics, logs, window:

  • scry_ms_autosuggest_query
  • scry_ms_autosuggest_results
  • scry_ms_autosuggest_results_rendered
  • scry_ms_admin_pages
  • scry_ms_analytics_event_to_insert
  • scry_ms_log_message
  • scry_ms_window_localized
  • scry_ms_premium_upgrades_display

PHP actions

  • scry_ms_after_index_document
  • scry_ms_after_delete_document
  • scry_ms_after_bulk_index
  • scry_ms_after_create_index
  • scry_ms_index_settings_restore
  • scry_ms_index_update_settings
  • scry_ms_index_settings_sections_ui
  • scry_ms_premium_upgrade_settings_ui

JavaScript runtime (window.scrySearch)

Optional. Enqueued on the front end (script handle scry_ms_window-script). Wait for the scrySearchReady event on document before using it.

  • window.scrySearch.version
  • window.scrySearch.getSearchForms()
  • window.scrySearch.getSearchFormsByClass(className)
  • window.scrySearch.registerUpgrade(name, version) — namespace for add-ons under window.scrySearch.upgrades

Per form (ScrySearch_SearchForm):

  • formElement, searchInput, data
  • submit(), submitAjax() (debounced)
  • addPreSubmitAction(fn, order) / addPostSubmitAction(fn, order)
  • addPreSubmitAjaxAction(fn, order) / addPostSubmitAjaxAction(fn, order)

A search form is any <form> with role="search" or a text/search input named s. Autosuggest and similar features attach through the AJAX action lists. Details and examples: DOCS.md.

Hosting

  1. ScryWP Search — managed Meilisearch for WordPress
  2. Self-hosted — your server, full control
  3. Local — for development and testing

Enter URL + keys under Scry Search Connection Settings, pick post types, index, done.

Works with your existing setup

  • Theme search templates (search.php, searchform.php)
  • Core search widgets and Gutenberg search blocks
  • Page builders (Elementor, Divi, Beaver Builder, etc.)
  • WooCommerce products and product meta
  • Any registered custom post type
  • Optional autosuggest / highlighting when you enable them

Get Managed Hosting from ScryWP

Don’t want to run Meilisearch yourself? ScryWP Search is managed hosting aimed at WordPress.

Requirements

  • WordPress 5.2 or higher
  • PHP 8.1 or higher
  • A Meilisearch instance (ScryWP or self-hosted)

Support

Hooks/docs: DOCS.md or GitHub. Issues and questions: same repo or JG Web Development.