Plainseek documentation

Plainseek is a WooCommerce product search that understands plain language. A shopper can type "red dress under $50", and Plainseek finds red dresses that cost less than $50.

This guide explains how to install Plainseek, where the search bar appears, what every setting does, and how to use the optional AI features.

Getting started

Requirements

SoftwareVersion
WordPress6.8 or newer
WooCommerce10.0 or newer
PHP8.1 or newer
DatabaseThe MySQL or MariaDB version your WooCommerce version requires

AI features are optional. They need an account with an AI provider. See AI features.

Install

  1. Download the plugin from CodeCanyon. Choose Installable WordPress file only, or unzip the full download and find plainseek.zip inside.
  2. In WordPress, go to Plugins > Add New Plugin and click Upload Plugin.
  3. Choose plainseek.zip, click Install Now, then click Activate.

WooCommerce must be active. If it is not, Plainseek shows a notice and waits.

First steps

  1. Open Plainseek > Dashboard. Plainseek starts indexing your products in the background as soon as you activate it. The Index card shows the progress. Most stores are ready in a few minutes.
  2. Look at the Try it box on the Dashboard. Type a search the way a shopper would, for example cheapest leather boots. You see exactly what shoppers will see.
  3. Visit your store. The theme's search box now uses Plainseek. To place the search bar somewhere else, see The search bar.
You do not need to rebuild the index when you add or edit products. Plainseek updates the index in the background after every change.

The search bar shows results while the shopper types: product images, names, prices, categories, and what Plainseek understood from the search. Shoppers can use it with the keyboard only: the up and down arrow keys move through the results, Enter opens one, and Escape closes the list.

By default, Plainseek replaces the theme's search form, the core Search block, and the WooCommerce product search. This works in block themes and in classic themes. To turn it off, go to Plainseek > Search > Where the search bar appears.

Block

In the block editor or the Site Editor, add the Plainseek Search block. In the block settings, you can set the placeholder, the size (small, medium, or large), and whether to show the Search button. To put the search bar in your header, open Appearance > Editor, edit the Header template part, and add the block.

Shortcode

Add the search bar anywhere that accepts shortcodes:

[plainseek]
OptionValuesExample
placeholderAny text[plainseek placeholder="Search our shop"]
sizesmall, medium, large[plainseek size="large"]
buttonyes, no[plainseek button="no"]

Elementor

In the Elementor panel, search for Plainseek Search and drag the widget onto the page. It has the same options as the block.

How shoppers search

Plainseek reads a search before it runs it. Words that match your store become filters, and the rest is searched as text. Shoppers see what was understood as chips, for example Red Under $50. Clicking a chip removes it.

Shopper typesPlainseek understands
under $50, below 50, less than 50 dollarsPrice at most 50
over 100, at least $100, $100+Price at least 100
between 20 and 60, $20-$60Price from 20 to 60
around $100Price from 80 to 120
red, navy blue, leather, xlFilter by your attribute values. Only values your products use.
size m, size 42Short or numeric values need their label, so "m" alone is not read as a size
A brand nameFilter by brand
cheapest, most expensive, newest, best selling, top ratedSort order
in stock, on saleOnly products in stock, or on sale

Typos, plurals, and synonyms

"weding dersses" finds wedding dresses, and the results say "Showing results for wedding dress". "dresses" also finds "dress". Words from your synonyms find each other, so "couch" can find sofas.

When nothing matches

If a filter leaves no products, Plainseek drops it and says so. For example, if you have no red wedding dresses, "red wedding dress" shows other wedding dresses with the note "No exact match for Red. Showing similar products." Shoppers do not see an empty page.

The results page

When a shopper presses Enter, the normal WooCommerce search results page opens. Plainseek chooses and orders the products, and your theme shows them with its usual templates. The chips appear at the top of the page. If the shopper picks a sort order from the shop's sort menu, that order is used.

Settings

Every screen is under the Plainseek menu. Settings screens show a bar at the bottom of the page when you have unsaved changes.

SettingWhat it does
Prices; Colors, sizes, brands, and other attributes; Sort and stock wordsTurn each kind of understanding on or off.
Typo toleranceNormal allows 1 typo in short words and 2 in long words. Strict allows 1. Off allows none.
Match singular and plural"dresses" finds "dress". This works for English stores. Changing it rebuilds the index.
Ranking weightsHow much a match in each field counts. A match in the product name counts more than one in the description. Set a field to 0 to leave it out. Changing weights rebuilds the index.
Boost best sellers and top rated productsPopular products rank a little higher.
Push out of stock products downOut of stock products rank lower. To hide them completely, use the WooCommerce setting Hide out of stock items from the catalog.
Search bar resultsHow many products the dropdown shows, and which details it shows.
Replace my theme's searchSee Replace the theme search.

Appearance

Choose the accent color, the corner radius, the size, and the placeholder. The text color on the Search button is picked for good contrast automatically. The preview on the right uses your real products.

Leave the placeholder empty to show an example search, such as Try "red dress under $50". This teaches shoppers that they can type plain language.

Synonyms

Synonyms teach Plainseek the words your shoppers use that your products do not.

Words and short phrases both work. Changes apply right away, without a rebuild.

Suggested synonyms

When shoppers search for words that find nothing, Plainseek suggests a fix in two ways:

Click Add synonym to accept a suggestion.

Import and export

The CSV file has one group per line: the type (two_way or one_way), a comma, and the words separated by |.

two_way,sofa|couch|settee
one_way,laptop|notebook|macbook

Analytics

The Analytics screen shows the number of searches, searches with no results, searches that led to a click, a daily chart, top searches, searches with no results, and the most clicked products. Export the list of searches as a CSV file with Export CSV.

Plainseek stores only the search text, the number of results, the clicked product, and the date. It does not store IP addresses or link searches to accounts. Searches by store managers are not counted by default. Bots are not counted. You choose how long data is kept, from 30 days to 3 years.

Tools

ToolWhen to use it
Rebuild indexWhen results look out of date, for example after you imported products directly into the database.
Clear cacheSearch results are cached for 10 minutes and cleared when products change. Clear the cache if a change does not show.
Export and import settingsSave your settings and synonyms to a file, or copy them to another store. API keys are not exported.
Delete all Plainseek data when I delete the pluginOff by default, so nothing is lost if you reinstall. Deactivating the plugin never deletes data.
Delete all analyticsRemoves every recorded search. This cannot be undone.
System statusVersions and table sizes. Include it when you contact support.

AI features (optional)

Plainseek works fully without AI. AI features add three things:

Plainseek does not include or resell any AI service. You connect your own account with an AI provider and pay the provider directly.

What is sent

AI features are off until you turn them on. Before you can turn them on, the AI screen shows this table and asks you to confirm.

What is sentToWhen
Product name, categories, brand, attributes, tags, and descriptionsEmbeddings providerOnce per product, and again when its text changes
The text shoppers type in the search barEmbeddings provider, and the chat provider for long questionsWhen a search is not in the cache yet
Messages to the shopping assistant, and the parts of the store pages you pick that match the questionChat providerWhen a shopper uses the assistant

Never sent: customer names, email addresses, orders, addresses, IP addresses, or account data. You can turn AI off at any time with Turn off AI. Nothing is sent after that.

Set up

  1. Go to Plainseek > AI, read what is sent, tick the box, and click Turn on AI features.
  2. Under Search by meaning, choose an embeddings provider, paste your API key, and click Test connection. Leave the model empty to use the suggested one, or click Load models to choose another.
  3. Under Chat model, choose a chat provider. It can be the same provider or a different one.
  4. Click Save changes. Plainseek starts sending your products to the embeddings provider in the background. The progress bar shows when every product is ready.
API keys are stored encrypted with your site's secret keys. The screen only shows the last 4 characters. If your server lacks the PHP sodium extension, the screen warns you and keys are stored without encryption.

Exact words vs. meaning

This slider sets how results are blended. Lower values favor products that contain the typed words. Higher values favor products that match what the shopper means. 50 is a good start.

How AI search stays fast

Keyword results appear at once while the shopper types. When the shopper pauses on a search of two or more words, the search bar asks for AI-refined results and updates the list. Each search is embedded once and cached for 30 days.

Providers

ProviderSearch by meaningChat model
OpenAIYesYes
Google GeminiYesYes
Anthropic ClaudeNo, Anthropic has no embeddings modelYes
Mistral AIYesYes
CohereYesYes
Voyage AIYesNo
Together AIYesYes
DeepSeek, xAI Grok, Groq, OpenRouterNoYes
Azure OpenAIYesYes. Enter your resource address, for example https://YOUR-RESOURCE.openai.azure.com/openai/v1, and your deployment names as models.
OllamaYesYes. Runs on your own server, with no data leaving it. Enter the Ollama address, usually http://localhost:11434/v1.
Other OpenAI-compatible APIIf the API supports itIf the API supports it

If you pair Anthropic Claude as the chat model, choose another provider for search by meaning, for example Voyage AI or OpenAI.

If you change the embeddings provider or model, every product is sent again, because vectors from different models cannot be compared.

Cost control

Shopping assistant

The assistant is a chat window where shoppers ask for products and get answers about your store. It needs a chat model. See Set up.

  1. Go to Plainseek > Assistant and turn on Turn on the shopping assistant.
  2. Choose where it appears: a floating button, an "Ask the assistant" row in the search bar, or both.
  3. Under Store pages, pick the pages with your policies, such as Shipping, Returns, or FAQ.
  4. Save, then use the Try it box to ask a question the way a shopper would.

What it knows

How it stays accurate

The conversation is kept in the shopper's browser tab. It is not stored on your server. Only the question text is added to your analytics, and you can turn that off.

Privacy

Plainseek adds suggested text to Settings > Privacy > Policy Guide. Copy the parts that match how you set Plainseek up into your privacy policy.

For developers

Filters

FilterUse
plainseek_document_fieldsAdd text to a product's index entry, for example a custom field. Give it a weight with plainseek_field_weights.
plainseek_field_weightsChange or add field weights.
plainseek_is_searchableInclude or exclude a product from search.
plainseek_brand_taxonomiesTaxonomies treated as brands. Defaults cover WooCommerce Brands and common brand plugins.
plainseek_stopwordsWords that are ignored in the index and in searches.
plainseek_document_language, plainseek_current_languageLanguage of a product and of the current search. WPML and Polylang are supported automatically.
plainseek_search_resultChange a search result before it is cached.
plainseek_search_responseChange the data the search bar receives.
plainseek_search_config, plainseek_assistant_configChange the settings passed to the front-end scripts.
plainseek_replace_search_formKeep a specific theme search form.
plainseek_popular_queriesChange the popular searches shown in the empty search bar.
plainseek_log_searchSkip logging for some searches.
plainseek_rate_limit, plainseek_visitor_ipChange request limits, or read the visitor IP from a proxy header.
plainseek_ai_providersAdd a preset for another OpenAI-compatible provider.
plainseek_assistant_instructionsAdd instructions for the assistant, for example a tone of voice.
plainseek_assistant_store_facts, plainseek_assistant_contact_urlChange what the assistant knows about the store.
plainseek_assistant_visibleShow or hide the assistant on a page.
plainseek_admin_screens, plainseek_settings_rulesFor add-ons: add admin screens and settings.

Example: index a custom field

add_filter( 'plainseek_document_fields', function ( $fields, $product ) {
	$fields['designer'] = (string) $product->get_meta( 'designer' );
	return $fields;
}, 10, 2 );

add_filter( 'plainseek_field_weights', function ( $weights ) {
	$weights['designer'] = 6;
	return $weights;
} );

Rebuild the index in Plainseek > Tools after adding a field.

Actions

ActionFires when
plainseek_products_indexedProducts were indexed in the background. Receives the product IDs.
plainseek_full_index_finishedA full index rebuild finished.
plainseek_results_page_searchPlainseek ran the search for the results page. Receives the result.
plainseek_clear_cacheThe owner cleared the cache.

Styling

The search bar and the assistant use CSS custom properties. Override them in your theme:

:root {
	--plainseek-accent: #0f766e;
	--plainseek-radius: 4px;
	--plainseek-bg: #ffffff;
	--plainseek-text: #111827;
	--plainseek-muted: #6b7280;
	--plainseek-border: #d1d5db;
	--plainseek-hover: #f3f4f6;
}

REST API

EndpointUse
GET /wp-json/plainseek/v1/search?q=red+dressSearch. Public. Parameters: q, page, per_page (up to 24), prefix, ai.
POST /wp-json/plainseek/v1/assistantAssistant reply. Public when the assistant is on. Body: {"messages": [{"role": "user", "content": "..."}]}.
/wp-json/plainseek/v1/admin/*Admin screens. Needs the manage_woocommerce capability.

Database tables

WordPress recommends few custom tables. Plainseek needs three, because a search index cannot be fast in the posts and meta tables.

TableHolds
{prefix}plainseek_documentsOne row per product, with the compressed AI vector when AI is on.
{prefix}plainseek_postingsThe search index: one row per word per product.
{prefix}plainseek_logSearch analytics.

Prices, stock, and sales are read from WooCommerce's own wc_product_meta_lookup table, so search never shows an old price.

Troubleshooting

The index stays at 0 or stops

Plainseek indexes with Action Scheduler, which WooCommerce includes. It runs on WP-Cron. If WP-Cron is off on your server (DISABLE_WP_CRON), make sure a real cron job calls wp-cron.php. You can see waiting jobs in Tools > Scheduled Actions, group plainseek. Plainseek > Tools > System status shows whether WP-Cron is on.

A product does not appear in search

The theme's search box did not change

Some themes build their search form without the standard WordPress functions. Add the Plainseek Search block or the [plainseek] shortcode instead, and hide the theme's own search in the theme options.

"The API key was not accepted"

Check the key and that it has permission for the model. For Azure OpenAI, check the address and use your deployment names as models.

"The provider is limiting requests or the account has no credit left"

Check your balance and rate limits with the provider. Search keeps working with keywords in the meantime. Embedding retries by itself, and Try again now on the AI screen restarts it.

Ollama on the same server cannot be reached

Use the address the web server can reach. In Docker setups this is often http://host.docker.internal:11434/v1 instead of localhost.

Support and changelog

For help, use the Support tab on the Plainseek page on CodeCanyon. Please include the System status from Plainseek > Tools.

Changelog

1.0.0 - 2026-09-25