{"id":261956,"date":"2026-03-04T17:06:18","date_gmt":"2026-03-04T17:06:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/scrywp-search\/"},"modified":"2026-08-07T18:43:08","modified_gmt":"2026-08-07T18:43:08","slug":"scry-search","status":"publish","type":"plugin","link":"https:\/\/vec.wordpress.org\/plugins\/scry-search\/","author":21037131,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.0.3","requires":"5.2","requires_php":"8.1","requires_plugins":null,"header_name":"Scry Search: Meilisearch for WordPress","header_author":"JG Web Development","header_description":"A powerful semantic search plugin, powered by Meilisearch.","assets_banners_color":"","last_updated":"2026-08-07 18:43:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/scrywp.com","header_author_uri":"https:\/\/jacob-t-graham.com","rating":5,"author_block_rating":0,"active_installs":20,"downloads":1066,"num_ratings":2,"support_threads":3,"support_threads_resolved":1,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"jtgraham38","date":"2026-03-09 21:10:44"},"1.0.1":{"tag":"1.0.1","author":"jtgraham38","date":"2026-03-09 21:10:44"},"1.0.2":{"tag":"1.0.2","author":"jtgraham38","date":"2026-04-02 18:39:35"},"1.1.0":{"tag":"1.1.0","author":"jtgraham38","date":"2026-05-02 19:38:40"},"1.1.1":{"tag":"1.1.1","author":"jtgraham38","date":"2026-05-08 15:06:52"},"1.1.2":{"tag":"1.1.2","author":"jtgraham38","date":"2026-06-10 18:54:25"},"1.2.0":{"tag":"1.2.0","author":"jtgraham38","date":"2026-06-10 18:54:25"},"1.2.1":{"tag":"1.2.1","author":"jtgraham38","date":"2026-06-19 20:03:30"},"1.3.0":{"tag":"1.3.0","author":"jtgraham38","date":"2026-08-06 19:43:46"},"1.4.0":{"tag":"1.4.0","author":"jtgraham38","date":"2026-08-07 18:43:08"}},"upgrade_notice":{"1.4.0":"<p>Tabbed Index Settings: filterable fields, custom ranking rules, dictionary, typo tolerance, raw JSON viewers, plus batched bulk indexing and new <code>scry_ms_*<\/code> hooks. See DOCS.md.<\/p>","1.3.0":"<p>More developer hooks (indexing\/search gates, client factory, autosuggest results, admin tabs), optional highlighting, autosuggest thumbnails, analytics metadata, Hybrid listing, indexing fix for embedder setups. See DOCS.md.<\/p>","1.2.1":"<p>Upgrades page updates; task pane fix for multi-tenant Meilisearch.<\/p>","1.2.0":"<p>Logs screen and expanded hooks \/ <code>window.scrySearch<\/code> (see DOCS.md).<\/p>","1.1.2":"<p>Analytics CSV export and retention cleanup.<\/p>","1.0.3":"<p>Optional AJAX autosuggest under Search Settings.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3474753,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3474753,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","1.1.0","1.1.1","1.1.2","1.2.0","1.2.1","1.3.0","1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3474753,"resolution":"1","location":"assets","locale":"","width":983,"height":534},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3474753,"resolution":"2","location":"assets","locale":"","width":926,"height":496},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3474753,"resolution":"3","location":"assets","locale":"","width":1170,"height":901},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3474753,"resolution":"4","location":"assets","locale":"","width":1252,"height":845},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3474753,"resolution":"5","location":"assets","locale":"","width":392,"height":941}},"screenshots":{"1":"Index Settings Dashboard - Manage post type indexes, view document counts, and trigger indexing operations","2":"Index Configuration Modal - Tabbed settings for ranking rules (including custom rules), searchable\/filterable fields, synonyms, stop words, dictionary, and typo tolerance","3":"Connection Settings - Configure Meilisearch URL and API keys with connection testing","4":"Search Settings - Configure post type search weights for federated search, enable AJAX autosuggest, and set the class selector for which forms receive predictive search","5":"Task Drawer - Monitor Meilisearch tasks with status, timing, and error details","6":"Live Search Preview - Test search queries directly from the admin panel","7":"Search Analytics - Dashboard, privacy\/retention settings, CSV export of analytics data"}},"plugin_section":[],"plugin_tags":[2275,274822,4073,230825,944],"plugin_category":[45],"plugin_contributors":[222622],"plugin_business_model":[],"class_list":["post-261956","plugin","type-plugin","status-publish","hentry","plugin_tags-developer","plugin_tags-extendable","plugin_tags-hooks","plugin_tags-meilisearch","plugin_tags-search","plugin_category-ecommerce","plugin_contributors-jtgraham38","plugin_committers-jtgraham38"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/scry-search\/assets\/icon-128x128.png?rev=3474753","icon_2x":"https:\/\/ps.w.org\/scry-search\/assets\/icon-256x256.png?rev=3474753","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/scry-search\/assets\/screenshot-1.png?rev=3474753","caption":"Index Settings Dashboard - Manage post type indexes, view document counts, and trigger indexing operations"},{"src":"https:\/\/ps.w.org\/scry-search\/assets\/screenshot-2.png?rev=3474753","caption":"Index Configuration Modal - Tabbed settings for ranking rules (including custom rules), searchable\/filterable fields, synonyms, stop words, dictionary, and typo tolerance"},{"src":"https:\/\/ps.w.org\/scry-search\/assets\/screenshot-3.png?rev=3474753","caption":"Connection Settings - Configure Meilisearch URL and API keys with connection testing"},{"src":"https:\/\/ps.w.org\/scry-search\/assets\/screenshot-4.png?rev=3474753","caption":"Search Settings - Configure post type search weights for federated search, enable AJAX autosuggest, and set the class selector for which forms receive predictive search"},{"src":"https:\/\/ps.w.org\/scry-search\/assets\/screenshot-5.png?rev=3474753","caption":"Task Drawer - Monitor Meilisearch tasks with status, timing, and error details"}],"raw_content":"<!--section=description-->\n<p>Scry Search is built by developers for developers \u2014 but you don't need to be one to run it.<\/p>\n\n<p>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.<\/p>\n\n<p>If you <em>are<\/em> a developer, the same plugin is meant to be extended: <code>scry_ms_*<\/code> filters\/actions, optional <code>window.scrySearch<\/code>, and a full hook reference in DOCS.md (<a href=\"https:\/\/github.com\/jtgraham38\/ScryWP-Search\">GitHub<\/a>). 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.<\/p>\n\n<h4>Works from the admin (no code)<\/h4>\n\n<ul>\n<li>Connection Settings \u2014 URL and API keys, with a connection test<\/li>\n<li>Index Settings \u2014 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<\/li>\n<li>Search Settings \u2014 post-type weights for federated search, optional autosuggest and matched-term highlighting<\/li>\n<li>Task drawer, Logs, and Search Analytics for day-to-day ops<\/li>\n<\/ul>\n\n<p>Site owners and agencies can go live without custom development. Developers can still hook in when a project needs it.<\/p>\n\n<h4>Headless: no frontend UI required<\/h4>\n\n<p>This plugin does not force a search UI on you. No required shortcode, widget, or results template.<\/p>\n\n<p>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 <code>WP_Query<\/code> \/ the autosuggest REST endpoint.<\/p>\n\n<h4>Drop-in WordPress search<\/h4>\n\n<p>Scry Search hooks <code>posts_pre_query<\/code>. Any <code>WP_Query<\/code> with a search string can go through Meilisearch (main search, programmatic queries, autosuggest) and still return normal <code>WP_Post<\/code> objects.<\/p>\n\n<ul>\n<li>No theme rewrites, no forced shortcodes, no widget lock-in<\/li>\n<li><code>search.php<\/code>, <code>searchform.php<\/code>, core search widgets\/blocks, and page-builder search elements keep working if you use them<\/li>\n<li>Opt out per query with <code>scry_ms_should_search<\/code> when you need native WP search<\/li>\n<\/ul>\n\n<p>Works with Elementor, Divi, Beaver Builder, and similar tools: whatever search box they output still hits WordPress search, which Scry Search routes to Meilisearch.<\/p>\n\n<h4>AJAX autosuggest (optional)<\/h4>\n\n<p>Enable Autosuggest under Scry Search \u2192 Search Settings. The plugin attaches debounced AJAX to existing <code>name=\"s\"<\/code> 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.<\/p>\n\n<p>Shape the result data with <code>scry_ms_autosuggest_results<\/code>, or the rendered HTML with <code>scry_ms_autosuggest_results_rendered<\/code>. Leave autosuggest off to stay fully headless.<\/p>\n\n<h4>Per-post-type indexes and federated search<\/h4>\n\n<p>Index any registered post type independently \u2014 posts, pages, WooCommerce products, CPTs from other plugins. Each type gets its own Meilisearch index:<\/p>\n\n<ul>\n<li>Searchable fields \u2014 titles, content, excerpts, taxonomies, author, custom meta (ACF, Meta Box, etc.)<\/li>\n<li>Filterable fields \u2014 post type\/status\/author, post date, taxonomy IDs (<code>taxonomies.&lt;name&gt;.id<\/code>), and more for facets and advanced filters<\/li>\n<li>Ranking rules \u2014 drag-and-drop reorder (words, typo, proximity, attribute, sort, exactness) plus custom <code>attribute:asc<\/code> \/ <code>attribute:desc<\/code> rules per index<\/li>\n<li>Search weights \u2014 e.g. weight products above blog posts in the merged results<\/li>\n<\/ul>\n\n<p>Search uses Meilisearch federated multi-search: indexes queried together, results merged and re-ranked with your per\u2013post-type weights (not a hand-stitched PHP merge).<\/p>\n\n<h4>Relevancy, filtering, and language settings<\/h4>\n\n<p>Per index from the tabbed Index Settings dialog (or via filters):<\/p>\n\n<ul>\n<li>Reorder built-in ranking rules and add custom ranking rules<\/li>\n<li>Choose which attributes are searchable and which are filterable<\/li>\n<li>Synonyms \u2014 nicknames, abbreviations, UK\/US spelling, brand aliases<\/li>\n<li>Stopwords \u2014 drop noise terms that shouldn't affect ranking<\/li>\n<li>Dictionary \u2014 keep acronyms and multi-word brand names from being split during tokenization<\/li>\n<li>Typo tolerance \u2014 enable\/disable, min word sizes, and disable on numbers, words, or attributes<\/li>\n<li>View Raw JSON for each settings group when debugging<\/li>\n<\/ul>\n\n<h4>WooCommerce<\/h4>\n\n<p>Fully compatible. Select <code>product<\/code> 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.<\/p>\n\n<h4>Search analytics<\/h4>\n\n<p>Scry Search \u2192 Search Analytics:<\/p>\n\n<ul>\n<li>Dashboard with summary metrics, charts, and recent searches<\/li>\n<li>Optional IP anonymization \/ omit identifying fields<\/li>\n<li>Retention period with daily WP-Cron cleanup, plus a manual \u201cdelete old events\u201d button<\/li>\n<li>CSV export of the analytics table (admin-only, nonce-protected)<\/li>\n<li>Extra fields via <code>scry_ms_analytics_event_to_insert<\/code> (non-column keys go into <code>search_metadata<\/code>)<\/li>\n<\/ul>\n\n<h4>Task monitor<\/h4>\n\n<p>Task drawer on plugin admin screens:<\/p>\n\n<ul>\n<li>Indexing tasks with status, duration, and errors<\/li>\n<li>Paginated history<\/li>\n<li>Scoped to indexes this plugin manages (shared Meilisearch instances won't dump unrelated tasks)<\/li>\n<\/ul>\n\n<h4>Debug and error logs<\/h4>\n\n<p>Scry Search \u2192 Logs:<\/p>\n\n<ul>\n<li>Debug and Error levels, filterable in the viewer<\/li>\n<li>Stored in the database, newest first, load-more paging<\/li>\n<li>API keys \/ tokens redacted before storage<\/li>\n<li>Retention + daily cleanup, or clean up on demand<\/li>\n<\/ul>\n\n<h4>Automatic and manual indexing<\/h4>\n\n<ul>\n<li>Auto-index on create\/update; remove on trash\/delete; re-index on untrash<\/li>\n<li>One-click bulk index per post type<\/li>\n<li>Wipe and rebuild when you need a clean slate<\/li>\n<li>Live search preview from the indexes UI before you ship ranking changes<\/li>\n<\/ul>\n\n<h4>For developers: hooks and JS runtime<\/h4>\n\n<p>Admin covers setup and tuning. When you need custom behavior, use the public <code>scry_ms_*<\/code> PHP hooks and the optional <code>window.scrySearch<\/code> runtime. Call sites are marked <code>\/\/@HOOK: scry_ms_\u2026<\/code> in source.<\/p>\n\n<p>Full argument lists, return types, timing, and JS examples: <a href=\"https:\/\/github.com\/jtgraham38\/ScryWP-Search\/blob\/main\/DOCS.md\">DOCS.md on GitHub<\/a> (also shipped with the plugin).<\/p>\n\n<p>Code is split into <code>features\/&lt;name&gt;\/<\/code> packages. Prefer a search-only API key for front-end paths; the shared client factory supports <code>admin<\/code> vs <code>search<\/code>.<\/p>\n\n<p><strong>PHP filters<\/strong><\/p>\n\n<p>Indexing and documents:<\/p>\n\n<ul>\n<li><code>scry_ms_should_index<\/code><\/li>\n<li><code>scry_ms_should_delete<\/code><\/li>\n<li><code>scry_ms_index_prepare_document<\/code><\/li>\n<li><code>scry_ms_index_names<\/code><\/li>\n<li><code>scry_ms_index_searchable_attributes<\/code><\/li>\n<li><code>scry_ms_index_filterable_attributes<\/code><\/li>\n<li><code>scry_ms_index_filterable_fields<\/code><\/li>\n<li><code>scry_ms_index_typo_tolerance<\/code><\/li>\n<li><code>scry_ms_bulk_index_query_args<\/code><\/li>\n<li><code>scry_ms_bulk_index_batch_size<\/code><\/li>\n<li><code>scry_ms_index_ranking_rules<\/code><\/li>\n<li><code>scry_ms_index_fields<\/code><\/li>\n<li><code>scry_ms_index_meta_keys<\/code><\/li>\n<\/ul>\n\n<p>Index settings:<\/p>\n\n<ul>\n<li><code>scry_ms_index_settings_ajax<\/code><\/li>\n<li><code>scry_ms_index_settings_backup<\/code><\/li>\n<li><code>scry_ms_index_ranking_rules_before_update<\/code><\/li>\n<li><code>scry_ms_index_searchable_attributes_before_update<\/code><\/li>\n<li><code>scry_ms_index_synonyms_before_update<\/code><\/li>\n<li><code>scry_ms_index_stop_words_before_update<\/code><\/li>\n<li><code>scry_ms_index_filterable_attributes_before_update<\/code><\/li>\n<li><code>scry_ms_index_dictionary_before_update<\/code><\/li>\n<li><code>scry_ms_index_typo_tolerance_before_update<\/code><\/li>\n<\/ul>\n\n<p>Search and client:<\/p>\n\n<ul>\n<li><code>scry_ms_should_search<\/code><\/li>\n<li><code>scry_ms_meilisearch_client<\/code><\/li>\n<li><code>scry_ms_multi_search_index_names<\/code><\/li>\n<li><code>scry_ms_multi_search_query_params<\/code><\/li>\n<li><code>scry_ms_multi_search_query<\/code><\/li>\n<li><code>scry_ms_multi_search_queries<\/code><\/li>\n<li><code>scry_ms_multi_search_federation<\/code><\/li>\n<li><code>scry_ms_multi_search_raw_results<\/code><\/li>\n<li><code>scry_ms_multi_search_final_results<\/code><\/li>\n<\/ul>\n\n<p>Autosuggest, admin, analytics, logs, window:<\/p>\n\n<ul>\n<li><code>scry_ms_autosuggest_query<\/code><\/li>\n<li><code>scry_ms_autosuggest_results<\/code><\/li>\n<li><code>scry_ms_autosuggest_results_rendered<\/code><\/li>\n<li><code>scry_ms_admin_pages<\/code><\/li>\n<li><code>scry_ms_analytics_event_to_insert<\/code><\/li>\n<li><code>scry_ms_log_message<\/code><\/li>\n<li><code>scry_ms_window_localized<\/code><\/li>\n<li><code>scry_ms_premium_upgrades_display<\/code><\/li>\n<\/ul>\n\n<p><strong>PHP actions<\/strong><\/p>\n\n<ul>\n<li><code>scry_ms_after_index_document<\/code><\/li>\n<li><code>scry_ms_after_delete_document<\/code><\/li>\n<li><code>scry_ms_after_bulk_index<\/code><\/li>\n<li><code>scry_ms_after_create_index<\/code><\/li>\n<li><code>scry_ms_index_settings_restore<\/code><\/li>\n<li><code>scry_ms_index_update_settings<\/code><\/li>\n<li><code>scry_ms_index_settings_sections_ui<\/code><\/li>\n<li><code>scry_ms_premium_upgrade_settings_ui<\/code><\/li>\n<\/ul>\n\n<p><strong>JavaScript runtime (<code>window.scrySearch<\/code>)<\/strong><\/p>\n\n<p>Optional. Enqueued on the front end (script handle <code>scry_ms_window-script<\/code>). Wait for the <code>scrySearchReady<\/code> event on <code>document<\/code> before using it.<\/p>\n\n<ul>\n<li><code>window.scrySearch.version<\/code><\/li>\n<li><code>window.scrySearch.getSearchForms()<\/code><\/li>\n<li><code>window.scrySearch.getSearchFormsByClass(className)<\/code><\/li>\n<li><code>window.scrySearch.registerUpgrade(name, version)<\/code> \u2014 namespace for add-ons under <code>window.scrySearch.upgrades<\/code><\/li>\n<\/ul>\n\n<p>Per form (<code>ScrySearch_SearchForm<\/code>):<\/p>\n\n<ul>\n<li><code>formElement<\/code>, <code>searchInput<\/code>, <code>data<\/code><\/li>\n<li><code>submit()<\/code>, <code>submitAjax()<\/code> (debounced)<\/li>\n<li><code>addPreSubmitAction(fn, order)<\/code> \/ <code>addPostSubmitAction(fn, order)<\/code><\/li>\n<li><code>addPreSubmitAjaxAction(fn, order)<\/code> \/ <code>addPostSubmitAjaxAction(fn, order)<\/code><\/li>\n<\/ul>\n\n<p>A search form is any <code>&lt;form&gt;<\/code> with <code>role=\"search\"<\/code> or a text\/search input named <code>s<\/code>. Autosuggest and similar features attach through the AJAX action lists. Details and examples: <a href=\"https:\/\/github.com\/jtgraham38\/ScryWP-Search\/blob\/main\/DOCS.md\">DOCS.md<\/a>.<\/p>\n\n<h4>Hosting<\/h4>\n\n<ol>\n<li><a href=\"https:\/\/scrywp.com\">ScryWP Search<\/a> \u2014 managed Meilisearch for WordPress<\/li>\n<li>Self-hosted \u2014 your server, full control<\/li>\n<li>Local \u2014 for development and testing<\/li>\n<\/ol>\n\n<p>Enter URL + keys under Scry Search \u2192 Connection Settings, pick post types, index, done.<\/p>\n\n<h4>Works with your existing setup<\/h4>\n\n<ul>\n<li>Theme search templates (<code>search.php<\/code>, <code>searchform.php<\/code>)<\/li>\n<li>Core search widgets and Gutenberg search blocks<\/li>\n<li>Page builders (Elementor, Divi, Beaver Builder, etc.)<\/li>\n<li>WooCommerce products and product meta<\/li>\n<li>Any registered custom post type<\/li>\n<li>Optional autosuggest \/ highlighting when you enable them<\/li>\n<\/ul>\n\n<h3>Get Managed Hosting from ScryWP<\/h3>\n\n<p>Don't want to run Meilisearch yourself? <a href=\"https:\/\/scrywp.com\">ScryWP Search<\/a> is managed hosting aimed at WordPress.<\/p>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 5.2 or higher<\/li>\n<li>PHP 8.1 or higher<\/li>\n<li>A Meilisearch instance (ScryWP or self-hosted)<\/li>\n<\/ul>\n\n<h3>Support<\/h3>\n\n<p>Hooks\/docs: DOCS.md or <a href=\"https:\/\/github.com\/jtgraham38\/ScryWP-Search\">GitHub<\/a>. Issues and questions: same repo or <a href=\"https:\/\/jacob-t-graham.com\">JG Web Development<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Have a Meilisearch instance running (<a href=\"https:\/\/scrywp.com\">ScryWP<\/a>, self-hosted, or local).<\/li>\n<li>Install and activate the plugin (upload to <code>wp-content\/plugins\/<\/code> or via Plugins \u2192 Add New).<\/li>\n<li>Scry Search \u2192 Connection Settings: URL, admin key, optional search key; test connection.<\/li>\n<li>Scry Search \u2192 Index Settings: choose post types, save, Index Posts for each.<\/li>\n<li>WordPress search now uses Meilisearch. No theme changes required.<\/li>\n<li>Optional: enable autosuggest or highlighting under Search Settings.<\/li>\n<li>Optional: open DOCS.md and add your first <code>add_filter( 'scry_ms_\u2026' )<\/code>.<\/li>\n<\/ol>\n\n<p>You can complete the whole flow from wp-admin without custom code. Hooks are there when you need them.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20makes%20this%20developer-friendly%3F\"><h3>What makes this developer-friendly?<\/h3><\/dt>\n<dd><p>It's built by people who write WordPress integrations for a living. Hooks are documented and marked in code, there's a shared client filter, and DOCS.md is the reference. Headless by default if you don't want plugin UI on the front.<\/p><\/dd>\n<dt id=\"can%20non-developers%20use%20it%3F\"><h3>Can non-developers use it?<\/h3><\/dt>\n<dd><p>Yes. Connect Meilisearch, select post types, index, and adjust ranking, synonyms, weights, and autosuggest from wp-admin. You only need a developer when you want custom behavior beyond the settings screens.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20use%20a%20frontend%20ui%20from%20the%20plugin%3F\"><h3>Do I have to use a frontend UI from the plugin?<\/h3><\/dt>\n<dd><p>No. Search is <code>WP_Query<\/code> (and optional REST). Autosuggest and highlighting are opt-in. Use your own templates or a separate front.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20change%20my%20theme%3F\"><h3>Do I need to change my theme?<\/h3><\/dt>\n<dd><p>No. Existing search forms and templates keep working. If you don't have any, the plugin still doesn't force one on you. Page-builder search elements work the same way.<\/p><\/dd>\n<dt id=\"what%20is%20meilisearch%3F\"><h3>What is Meilisearch?<\/h3><\/dt>\n<dd><p>Open-source, typo-tolerant search engine: <a href=\"https:\/\/www.meilisearch.com\/\">meilisearch.com<\/a>. This plugin assumes you already chose it (or will via ScryWP); we focus on the WordPress integration.<\/p><\/dd>\n<dt id=\"scrywp%20or%20self-host%3F\"><h3>ScryWP or self-host?<\/h3><\/dt>\n<dd><p><a href=\"https:\/\/scrywp.com\">ScryWP<\/a> if you don't want to operate Meilisearch. Self-host for control, compliance, or local\/dev. Either way you paste URL and keys into the plugin.<\/p><\/dd>\n<dt id=\"custom%20post%20types%20and%20meta%3F\"><h3>Custom post types and meta?<\/h3><\/dt>\n<dd><p>Yes. Each selected post type gets its own index. Meta shows up in searchable fields; tweak via admin or <code>scry_ms_index_fields<\/code> \/ <code>scry_ms_index_meta_keys<\/code> \/ <code>scry_ms_index_prepare_document<\/code>.<\/p><\/dd>\n<dt id=\"how%20does%20federated%20search%20work%3F\"><h3>How does federated search work?<\/h3><\/dt>\n<dd><p>Meilisearch multi-search with federation across your indexes, using the weights you set in Search Settings. Adjust the request with <code>scry_ms_multi_search_*<\/code>.<\/p><\/dd>\n<dt id=\"will%20this%20work%20with%20woocommerce%3F\"><h3>Will this work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Index <code>product<\/code>, choose fields\/meta, set weights if you federate with other types. Theme and checkout stay unchanged.<\/p><\/dd>\n<dt id=\"synonyms%2C%20stopwords%2C%20dictionary%2C%20and%20typo%20tolerance%3F\"><h3>Synonyms, stopwords, dictionary, and typo tolerance?<\/h3><\/dt>\n<dd><p>Yes \u2014 per index in the Index Settings dialog (dedicated tabs), no Meilisearch config files required. Also filterable from code when you need that.<\/p><\/dd>\n<dt id=\"can%20i%20configure%20filterable%20fields%20from%20wordpress%3F\"><h3>Can I configure filterable fields from WordPress?<\/h3><\/dt>\n<dd><p>Yes. The Filterable Fields tab lets you pick core fields, taxonomy IDs, and related attributes. Defaults and the field tree are adjustable with <code>scry_ms_index_filterable_attributes<\/code> \/ <code>scry_ms_index_filterable_fields<\/code>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20customize%20with%20code%3F\"><h3>How do I customize with code?<\/h3><\/dt>\n<dd><p>See <strong>For developers: hooks and JS runtime<\/strong> above for the full list. Common starters: <code>scry_ms_should_index<\/code>, <code>scry_ms_index_prepare_document<\/code>, <code>scry_ms_meilisearch_client<\/code>, <code>scry_ms_autosuggest_results<\/code> \/ <code>scry_ms_autosuggest_results_rendered<\/code>, <code>scry_ms_admin_pages<\/code>. Signatures and examples: <a href=\"https:\/\/github.com\/jtgraham38\/ScryWP-Search\/blob\/main\/DOCS.md\">DOCS.md<\/a>.<\/p><\/dd>\n<dt id=\"javascript%20api%3F\"><h3>JavaScript API?<\/h3><\/dt>\n<dd><p>Yes \u2014 optional. See <strong>For developers: hooks and JS runtime<\/strong>. Wait for <code>scrySearchReady<\/code>, then use <code>window.scrySearch<\/code> and per-form pre\/post submit (and AJAX) action lists. Skip it if you're not attaching front-end behavior. Details in DOCS.md.<\/p><\/dd>\n<dt id=\"how%20do%20i%20debug%20indexing%3F\"><h3>How do I debug indexing?<\/h3><\/dt>\n<dd><p>Task drawer for Meilisearch tasks on managed indexes; Scry Search \u2192 Logs for plugin debug\/error lines (secrets redacted, retention available).<\/p><\/dd>\n<dt id=\"can%20i%20export%20analytics%3F\"><h3>Can I export analytics?<\/h3><\/dt>\n<dd><p>Scry Search \u2192 Search Analytics: CSV export, retention\/cleanup, privacy options, and <code>scry_ms_analytics_event_to_insert<\/code> for extra fields.<\/p><\/dd>\n<dt id=\"is%20it%20secure%3F\"><h3>Is it secure?<\/h3><\/dt>\n<dd><p>AJAX nonces, capability checks, sanitized\/escaped I\/O. Prefer a search-only API key for front-end paths; the client factory supports <code>admin<\/code> vs <code>search<\/code> keys.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Tabbed Index Settings dialog covering ranking rules, searchable fields, filterable fields, synonyms, stop words, dictionary, and typo tolerance<\/li>\n<li>Filterable attributes managed in core \u2014 including post taxonomies (<code>taxonomies.&lt;name&gt;.id<\/code>) and <code>post_date_unix<\/code><\/li>\n<li>Custom ranking rules (<code>attribute:asc<\/code> \/ <code>attribute:desc<\/code>) with drag-and-drop ordering alongside built-in rules<\/li>\n<li>Dictionary and typo tolerance settings (enable\/disable, min word sizes, disable on numbers\/words\/attributes)<\/li>\n<li>View Raw JSON on each settings section for debugging<\/li>\n<li>Settings backup\/restore now includes filterable attributes, dictionary, and typo tolerance<\/li>\n<li>New hooks: <code>scry_ms_index_filterable_attributes<\/code>, <code>scry_ms_index_filterable_fields<\/code>, <code>scry_ms_index_filterable_attributes_before_update<\/code>, <code>scry_ms_index_dictionary_before_update<\/code>, <code>scry_ms_index_typo_tolerance<\/code>, <code>scry_ms_index_typo_tolerance_before_update<\/code>, <code>scry_ms_bulk_index_batch_size<\/code><\/li>\n<li>Bulk indexing processes posts in batches (memory-friendly; batch size filterable)<\/li>\n<li>Setup breadcrumb navigation on admin pages<\/li>\n<li>DOCS.md \/ README updated for the new index settings surface<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New hooks: <code>should_index<\/code>, <code>should_delete<\/code>, <code>should_search<\/code>, <code>after_index_document<\/code>, <code>after_delete_document<\/code>, <code>after_bulk_index<\/code>, <code>index_names<\/code>, <code>index_searchable_attributes<\/code>, <code>bulk_index_query_args<\/code>, <code>meilisearch_client<\/code>, <code>autosuggest_results<\/code>, <code>autosuggest_results_rendered<\/code>, <code>admin_pages<\/code><\/li>\n<li>Customize how your site displays autosuggest results with the <code>autosuggest_results_rendered<\/code> hook<\/li>\n<li>Documents now include public taxonomy terms; <code>index_prepare_document<\/code> gets <code>WP_Post<\/code> as second arg<\/li>\n<li>Sync on <code>delete_post<\/code> and <code>untrash_post<\/code><\/li>\n<li>DOCS.md \/ README updated<\/li>\n<li>Optional matched-term highlighting in results and autosuggest (Search Settings; CSS class <code>.scry-ms-highlight<\/code>)<\/li>\n<li>Autosuggest can show featured-image thumbnails<\/li>\n<li>Analytics: extra keys on <code>scry_ms_analytics_event_to_insert<\/code> stored in <code>search_metadata<\/code> (CSV too)<\/li>\n<li>Premium Upgrades lists Scry Search Hybrid alongside Filters<\/li>\n<li>Index settings restored from WP only when an index is newly created (avoids re-PATCHing Meilisearch every admin load when embedders are set)<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Task drawer only lists tasks for indexes this plugin manages<\/li>\n<li>Premium Upgrades page layout\/assets fix<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Logs screen (debug\/error, retention, secret redaction)<\/li>\n<li>More <code>scry_ms_*<\/code> hooks; documented in DOCS.md<\/li>\n<li><code>window.scrySearch<\/code> JS API<\/li>\n<li>Premium Upgrades admin page<\/li>\n<li>Federated search hit-count fix<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Analytics CSV export, retention\/cleanup, privacy settings on Search Analytics<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Optional AJAX autosuggest (Search Settings toggle + optional class selector)<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Synonyms and stopwords from the WordPress admin<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>ScryWP-hosted Meilisearch support<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: per-post-type indexes, federated search, ranking\/searchable fields, auto + bulk indexing, task drawer, live preview, drop-in WP search<\/li>\n<\/ul>","raw_excerpt":"Meilisearch for WordPress \u2014 by developers for developers, usable without writing code. Headless, documented hooks, drop-in WP_Query search.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/261956","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=261956"}],"author":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jtgraham38"}],"wp:attachment":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=261956"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=261956"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=261956"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=261956"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=261956"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=261956"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}