Search Filter Query Builder
Build search filter conditions visually and get the exact syntax for Meilisearch, Algolia, Elasticsearch, and Typesense.
How to use the Search Filter Query Builder
- Add a condition: type a field name, choose an operator, and enter a value. Use Add condition to AND another condition into the same group, or Add group (OR) to start a new group that's OR-ed against the others.
- For IN, enter a comma-separated list of values (escape a literal comma inside a value as
\,). For EXISTS / field does not exist, no value is needed. For within radius (geo), fill in latitude, longitude, and radius in meters. - Click Generate filter.
- Switch between the Meilisearch, Algolia, Elasticsearch, and Typesense tabs to see that engine's exact syntax, and click Copy.
- If a condition can't be expressed in a given engine's syntax (like an EXISTS check in Algolia, or geo radius in Algolia's filters string), that tab shows a warning explaining why instead of guessing.
See it in action
One set of conditions — category = "electronics" AND price > 100, OR category = "books" — generated for all four engines:
Meilisearch:
(category = "electronics" AND price > 100) OR category = "books"
Algolia:
(category:electronics AND price > 100) OR category:books
Typesense:
(category:=electronics && price:>100) || category:=books
Elasticsearch:
{
"query": {
"bool": {
"should": [
{
"bool": {
"filter": [
{ "term": { "category": "electronics" } },
{ "range": { "price": { "gt": 100 } } }
]
}
},
{ "bool": { "filter": [{ "term": { "category": "books" } }] } }
],
"minimum_should_match": 1
}
}
}
How This Tool Works
Build filter conditions visually — pick a field name, an operator (equals, greater than, IN, EXISTS, geo radius, ...), and a value — grouped into AND-blocks that are OR-ed together. That covers the vast majority of real-world search filters without needing arbitrarily nested parentheses.
Click Generate filter, then switch between the Meilisearch, Algolia, Elasticsearch, and Typesense tabs to get that engine's exact filter syntax for the same conditions — a Meilisearch filter expression string, an Algolia filters string, an Elasticsearch bool query JSON body, or a Typesense filter_by string.
The four engines don't all support the same things. When a condition can't be expressed the same way in a given engine — Algolia has no attribute-existence operator, and geo radius isn't part of its filters string at all — the tool shows a warning on that engine's tab instead of silently producing wrong or misleading syntax.
Everything runs in your browser. Conditions, field names, and values are never sent anywhere — this only builds filter syntax, it never queries a live search index.