ankane/searchkick · error · ArgumentError
distance must match searchkick options
Error message
distance must match searchkick options
What it means
Error "distance must match searchkick options" thrown in ankane/searchkick.
Source
Thrown at lib/searchkick/query.rb:1042
if ef_search && Searchkick.server_below?("2.16.0")
raise Error, "ef_search requires OpenSearch 2.16+"
end
payload[:query] = {
knn: {
field.to_sym => {
vector: vector,
k: k,
filter: filter
}.merge(ef_search ? {method_parameters: {ef_search: ef_search}} : {})
}
}
end
else
if exact
# prevent incorrect distances/results with Elasticsearch 9.0.0-rc1
if !Searchkick.server_below?("9.0.0") && field_options[:distance] == "cosine" && distance != "cosine"
raise ArgumentError, "distance must match searchkick options"
end
# https://github.com/elastic/elasticsearch/blob/main/docs/reference/vectors/vector-functions.asciidoc
source =
case distance
when "cosine"
"(cosineSimilarity(params.query_vector, params.field) + 1.0) * 0.5"
when "euclidean"
"double l2 = l2norm(params.query_vector, params.field); 1 / (1 + l2 * l2)"
when "taxicab"
"1 / (1 + l1norm(params.query_vector, params.field))"
when "inner_product"
"double dot = dotProduct(params.query_vector, params.field); dot > 0 ? dot + 1 : 1 / (1 - dot)"
else
raise ArgumentError, "Unknown distance: #{distance}"
end
payload[:query] = {View on GitHub (pinned to 93e901a75b)
When it happens
Trigger: Thrown at lib/searchkick/query.rb:1042 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of ankane/searchkick@93e901a75b (2026-08-21).
Data as JSON: /api/errors/bf8dcf85ef20ea1e.
Report an issue: GitHub.