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

  1. Check the query type name for typos against the supported list (term, terms, match, match_all, bool, range, wildcard, fuzzy, prefix, etc.)
  2. Replace unsupported ES query types with equivalent supported ones (e.g. bool should/filter for function_score)
  3. Move unsupported computation to application-side filtering
  4. 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

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.