zincsearch/zincsearch · error
not_implemented
not_implemented
Error message
[%s] query doesn't support
What it means
ParseQueryDSL dispatches the query clause to query.Query; when the dispatcher returns nil without error (an unrecognized or unimplemented query name), it surfaces not_implemented with the raw query object in the message, meaning the query type string is not in the supported registry.
Source
Thrown at pkg/uquery/query_dsl_parser.go:49
"github.com/zincsearch/zincsearch/pkg/uquery/query"
"github.com/zincsearch/zincsearch/pkg/uquery/sort"
"github.com/zincsearch/zincsearch/pkg/uquery/source"
)
// ParseQueryDSL parse query DSL and return searchRequest
func ParseQueryDSL(q *meta.ZincQuery, mappings *meta.Mappings, analyzers map[string]*analysis.Analyzer) (bluge.SearchRequest, error) {
// parse size
if q.Size > config.Global.MaxResults {
q.Size = config.Global.MaxResults
}
// parse query
query, err := query.Query(q.Query, mappings, analyzers)
if err != nil {
return nil, err
}
if query == nil {
return nil, errors.New(errors.ErrorTypeNotImplemented, fmt.Sprintf("[%s] query doesn't support", q.Query))
}
// create search request
request := bluge.NewTopNSearch(q.Size, query).WithStandardAggregations()
// parse highlight
if q.Highlight != nil {
_ = highlight.Request(q.Highlight)
request.IncludeLocations()
}
// parse from
if q.From > 0 {
request.SetFrom(q.From)
}
// parse explain
if q.Explain {View on GitHub (pinned to dd2f8afd65)
Solutions
- Check the query type name for typos against the supported list (term, terms, match, match_all, bool, range, wildcard, fuzzy, prefix, etc.)
- Replace unsupported ES query types with equivalent supported ones (e.g. bool should/filter for function_score)
- Move unsupported computation to application-side filtering
- Consult the zincsearch docs/source query registry for exact supported names
Example fix
// before
{"query": {"function_score": {"query": {"match_all": {}}, "boost_mode": "multiply"}}}
// after
{"query": {"bool": {"should": [{"match_all": {}}]}}} Defensive patterns
Strategy: validation
Validate before calling
const supported = new Set(['term','terms','match','match_all','match_phrase','bool','range','wildcard','fuzzy','prefix','ids','exists','query_string','nested','multi_match','date_range','numeric_range','aggregation']);
const [type] = Object.keys(q.query);
if (!supported.has(type)) throw new Error(`unsupported query type: ${type}`); Type guard
null
Try / catch
try { await search(body); } catch (e) { if (e.code === 'not_implemented' && /query doesn't support/.test(e.message)) { /* fall back to a supported query shape */ } else throw e; } Prevention
- Maintain an allowlist of supported query types in client code
- Check release notes when upgrading
- Reject unknown query types early in query builders
When it happens
Trigger: POST /api/search with q.Query containing an unknown or unimplemented query name such as {"function_score": {...}}, {"dis_max": {...}}, or a typo like {"match_all": false}-style malformed names — from Search or MultiSearch.
Common situations: Migrating ES queries using advanced query types (function_score, script_score, percolate); typos in query type names; older clients using deprecated query syntax.
Related errors
AI-assisted analysis of zincsearch/zincsearch@dd2f8afd65 (2026-09-03).
Data as JSON: /api/errors/b76e692089a0862a.
Report an issue: GitHub.