Files
upstream-bleve/docs/query-openapi-spec.yaml
upstream-mirror f8d3d9f0cf
Some checks failed
Coverage / coverage (push) Failing after 6s
Tests / test (1.24.x, ubuntu-latest) (push) Failing after 42s
Tests / test (1.26.x, ubuntu-latest) (push) Failing after 38s
Tests / test (1.25.x, ubuntu-latest) (push) Failing after 35s
Tests / test (1.25.x, windows-latest) (push) Has been cancelled
Tests / test (1.26.x, macos-latest) (push) Has been cancelled
Tests / test (1.26.x, windows-latest) (push) Has been cancelled
Tests / test (1.24.x, macos-latest) (push) Has been cancelled
Tests / test (1.24.x, windows-latest) (push) Has been cancelled
Tests / test (1.25.x, macos-latest) (push) Has been cancelled
snapshot of https://github.com/blevesearch/bleve.git (master, 2026-09-15; blobs > 131072B omitted)
2026-09-15 22:27:16 +05:00

863 lines
24 KiB
YAML

openapi: 3.0.3
info:
title: Bleve JSON Query Language
description: |
A comprehensive specification for the Bleve Query JSON Language.
Bleve is a text indexing library for Go that provides full-text search capabilities.
This specification defines the JSON structure for all supported query types in Bleve.
## Query Types Supported:
### Basic Queries
- **Term Query**: Exact term matching
- **Match Query**: Full-text search with analysis
- **Match Phrase Query**: Phrase matching with proximity
- **Prefix Query**: Prefix matching
- **Wildcard Query**: Pattern matching with * and ?
- **Regexp Query**: Regular expression matching
- **Fuzzy Query**: Fuzzy matching with edit distance
- **Query String Query**: Human-readable query syntax
### Range Queries
- **Numeric Range Query**: Numeric value ranges
- **Date Range Query**: Date/time ranges
- **Term Range Query**: Lexicographic term ranges
### Boolean Queries
- **Boolean Query**: Must/should/must_not combinations
- **Conjunction Query**: All queries must match
- **Disjunction Query**: Any query can match
### Special Queries
- **Match All Query**: Matches all documents
- **Match None Query**: Matches no documents
- **Bool Field Query**: Boolean field matching
- **Doc ID Query**: Document ID matching
### Geographic Queries
- **Geo Distance Query**: Distance-based geographic search
- **Geo Bounding Box Query**: Bounding box geographic search
- **Geo Bounding Polygon Query**: Polygon geographic search
- **Geo Shape Query**: Complex geographic shape matching
### Vector Queries
- **KNN Query**: K-nearest neighbors vector search
### Network Queries
- **IP Range Query**: IP address range matching
## Common Properties
All queries support:
- **boost**: Query boost value (float, default 1.0)
- **field**: Field to search (string, optional)
## Query Parsing
Bleve automatically detects query types based on the presence of specific JSON fields.
The query parser uses a heuristic approach to determine the query type from the JSON structure.
version: 2.0.0
contact:
name: Bleve Search
url: https://github.com/blevesearch/bleve
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0
tags:
- name: Basic Queries
description: Basic text search queries
- name: Range Queries
description: Range-based queries for numeric, date, and term values
- name: Boolean Queries
description: Compound queries combining multiple sub-queries
- name: Special Queries
description: Special purpose queries like match all/none
- name: Geographic Queries
description: Geographic and spatial search queries
- name: Vector Queries
description: Vector similarity and KNN queries
- name: Network Queries
description: Network and IP address queries
components:
schemas:
# Base Query Schema
Query:
type: object
description: Base query object - all queries extend this
properties:
boost:
type: number
format: float
description: Query boost value
default: 1.0
minimum: 0
field:
type: string
description: Field to search (optional, uses default field if not specified)
additionalProperties: true
# Basic Queries
TermQuery:
allOf:
- type: object
properties:
term:
type: string
description: Exact term to search for
example: "search"
required:
- term
example:
term: "search"
field: "title"
boost: 2.0
MatchQuery:
allOf:
- type: object
properties:
match:
type: string
description: Text to match (will be analyzed)
example: "full text search"
operator:
type: string
enum: [and, or]
description: Boolean operator for multiple terms
default: "or"
fuzziness:
oneOf:
- type: integer
minimum: 0
maximum: 2
description: Edit distance for fuzzy matching
- type: string
enum: ["auto"]
description: Automatic fuzziness
default: 0
prefix_length:
type: integer
description: Prefix length for fuzzy matching
minimum: 0
default: 0
analyzer:
type: string
description: Analyzer to use (optional)
required:
- match
example:
match: "full text search"
field: "content"
operator: "and"
fuzziness: 1
MatchPhraseQuery:
allOf:
- type: object
properties:
match_phrase:
type: string
description: Phrase to match exactly
example: "exact phrase match"
fuzziness:
oneOf:
- type: integer
minimum: 0
maximum: 2
- type: string
enum: ["auto"]
default: 0
analyzer:
type: string
description: Analyzer to use (optional)
required:
- match_phrase
example:
match_phrase: "exact phrase match"
field: "content"
fuzziness: "auto"
PrefixQuery:
allOf:
- type: object
properties:
prefix:
type: string
description: Prefix to match
example: "pref"
required:
- prefix
example:
prefix: "pref"
field: "title"
WildcardQuery:
allOf:
- type: object
properties:
wildcard:
type: string
description: Wildcard pattern (* matches any sequence, ? matches single character)
example: "te*t"
required:
- wildcard
example:
wildcard: "te*t"
field: "title"
RegexpQuery:
allOf:
- type: object
properties:
regexp:
type: string
description: Regular expression pattern (should not include ^ or $)
example: "te[st]"
required:
- regexp
example:
regexp: "te[st]"
field: "title"
FuzzyQuery:
allOf:
- type: object
properties:
term:
type: string
description: Term for fuzzy matching
example: "search"
fuzziness:
oneOf:
- type: integer
minimum: 0
maximum: 2
- type: string
enum: ["auto"]
default: 1
prefix_length:
type: integer
description: Prefix length for fuzzy matching
minimum: 0
default: 0
required:
- term
example:
term: "search"
field: "title"
fuzziness: "auto"
QueryStringQuery:
allOf:
- type: object
properties:
query:
type: string
description: Query string in human-readable syntax
example: "title:search AND content:full text"
required:
- query
example:
query: "title:search AND content:full text"
# Range Queries
NumericRangeQuery:
allOf:
- type: object
properties:
min:
type: number
format: float
description: Minimum value (inclusive by default)
max:
type: number
format: float
description: Maximum value (exclusive by default)
inclusive_min:
type: boolean
description: Whether minimum is inclusive
default: true
inclusive_max:
type: boolean
description: Whether maximum is inclusive
default: false
example:
min: 10.5
max: 100.0
inclusive_min: true
inclusive_max: false
field: "price"
DateRangeQuery:
allOf:
- type: object
properties:
start:
type: string
format: date-time
description: Start date/time
end:
type: string
format: date-time
description: End date/time
inclusive_start:
type: boolean
description: Whether start is inclusive
default: true
inclusive_end:
type: boolean
description: Whether end is inclusive
default: false
example:
start: "2023-01-01T00:00:00Z"
end: "2023-12-31T23:59:59Z"
inclusive_start: true
inclusive_end: true
field: "created_at"
TermRangeQuery:
allOf:
- type: object
properties:
min:
type: string
description: Minimum term (lexicographic)
max:
type: string
description: Maximum term (lexicographic)
inclusive_min:
type: boolean
description: Whether minimum is inclusive
default: true
inclusive_max:
type: boolean
description: Whether maximum is inclusive
default: false
example:
min: "a"
max: "m"
inclusive_min: true
inclusive_max: false
field: "name"
# Boolean Queries
BooleanQuery:
allOf:
- type: object
properties:
must:
oneOf:
- type: array
items:
$ref: '#/components/schemas/Query'
- $ref: '#/components/schemas/Query'
description: Queries that must match (can be single query or array)
should:
oneOf:
- type: array
items:
$ref: '#/components/schemas/Query'
- $ref: '#/components/schemas/Query'
description: Queries that should match (boost score, can be single query or array)
must_not:
oneOf:
- type: array
items:
$ref: '#/components/schemas/Query'
- $ref: '#/components/schemas/Query'
description: Queries that must not match (can be single query or array)
filter:
oneOf:
- type: array
items:
$ref: '#/components/schemas/Query'
- $ref: '#/components/schemas/Query'
description: Queries that filter results (no score impact, can be single query or array)
min_should:
type: integer
description: Minimum number of should queries that must match
minimum: 0
example:
must:
- term: "important"
field: "status"
- match: "urgent"
field: "title"
should:
- match: "critical"
field: "content"
- match: "priority"
field: "tags"
must_not:
- term: "archived"
field: "status"
filter:
- term: "published"
field: "status"
boost: 1.5
ConjunctionQuery:
allOf:
- type: object
properties:
conjuncts:
type: array
items:
$ref: '#/components/schemas/Query'
description: Array of queries that must all match
minItems: 1
required:
- conjuncts
example:
conjuncts:
- term: "search"
field: "title"
- match: "full text"
field: "content"
DisjunctionQuery:
allOf:
- type: object
properties:
disjuncts:
type: array
items:
$ref: '#/components/schemas/Query'
description: Array of queries where at least one must match
minItems: 1
min:
type: number
format: float
description: Minimum number of disjuncts that must match
default: 1
minimum: 0
required:
- disjuncts
example:
disjuncts:
- term: "urgent"
field: "title"
- term: "critical"
field: "content"
min: 1
# Special Queries
MatchAllQuery:
allOf:
- type: object
properties:
match_all:
type: object
description: Empty object indicating match all
example:
match_all: {}
boost: 1.0
MatchNoneQuery:
allOf:
- type: object
properties:
match_none:
type: object
description: Empty object indicating match none
example:
match_none: {}
BoolFieldQuery:
allOf:
- type: object
properties:
bool:
type: boolean
description: Boolean value to match
required:
- bool
example:
bool: true
field: "published"
DocIDQuery:
allOf:
- type: object
properties:
ids:
type: array
items:
type: string
description: Array of document IDs to match
minItems: 1
required:
- ids
example:
ids: ["doc1", "doc2", "doc3"]
# Geographic Queries
GeoDistanceQuery:
allOf:
- type: object
properties:
location:
oneOf:
- type: array
items:
type: number
format: float
minItems: 2
maxItems: 2
description: [longitude, latitude]
- type: object
properties:
lon:
type: number
format: float
lat:
type: number
format: float
distance:
type: string
description: Distance string (e.g., "10km", "5mi")
required:
- location
- distance
example:
location: [-122.4194, 37.7749]
distance: "10km"
field: "location"
GeoBoundingBoxQuery:
allOf:
- type: object
properties:
top_left:
oneOf:
- type: array
items:
type: number
format: float
minItems: 2
maxItems: 2
- type: object
properties:
lon:
type: number
format: float
lat:
type: number
format: float
bottom_right:
oneOf:
- type: array
items:
type: number
format: float
minItems: 2
maxItems: 2
- type: object
properties:
lon:
type: number
format: float
lat:
type: number
format: float
required:
- top_left
- bottom_right
example:
top_left: [-122.5, 37.8]
bottom_right: [-122.3, 37.7]
field: "location"
GeoBoundingPolygonQuery:
allOf:
- type: object
properties:
polygon_points:
type: array
items:
oneOf:
- type: array
items:
type: number
format: float
minItems: 2
maxItems: 2
- type: object
properties:
lon:
type: number
format: float
lat:
type: number
format: float
description: Array of polygon points [lon, lat]
minItems: 3
required:
- polygon_points
example:
polygon_points:
- [-122.5, 37.8]
- [-122.3, 37.8]
- [-122.3, 37.7]
- [-122.5, 37.7]
field: "location"
GeoShapeQuery:
allOf:
- type: object
properties:
geometry:
type: object
description: GeoJSON geometry object
properties:
type:
type: string
enum: [Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection]
coordinates:
description: Geometry coordinates (format depends on geometry type)
oneOf:
- type: array
description: Coordinates for Point, LineString, MultiPoint, etc.
- type: array
items:
type: array
description: Nested coordinates for Polygon, MultiLineString, etc.
- type: array
items:
type: array
items:
type: array
description: Deeply nested coordinates for MultiPolygon, etc.
required:
- type
- coordinates
required:
- geometry
example:
geometry:
type: "Polygon"
coordinates:
- [[-122.5, 37.8], [-122.3, 37.8], [-122.3, 37.7], [-122.5, 37.7], [-122.5, 37.8]]
field: "location"
# Vector Queries
KNNQuery:
allOf:
- type: object
properties:
field:
type: string
description: Vector field name
vector:
type: array
items:
type: number
format: float
description: Query vector
minItems: 1
k:
type: integer
format: int64
description: Number of nearest neighbors to return
minimum: 1
maximum: 10000
params:
type: object
description: Additional parameters for vector search
required:
- field
- vector
- k
example:
field: "embedding"
vector: [0.1, 0.2, 0.3, 0.4, 0.5]
k: 10
boost: 1.0
# Network Queries
IPRangeQuery:
allOf:
- type: object
properties:
cidr:
type: string
description: CIDR notation for IP range (e.g., "192.168.1.0/24")
required:
- cidr
example:
cidr: "192.168.1.0/24"
field: "ip_address"
# Phrase Query (internal use)
PhraseQuery:
allOf:
- type: object
properties:
terms:
type: array
items:
type: string
description: Array of terms in phrase order
required:
- terms
example:
terms: ["exact", "phrase", "match"]
field: "content"
MultiPhraseQuery:
allOf:
- type: object
properties:
terms:
type: array
items:
type: array
items:
type: string
description: Array of term arrays for multi-phrase matching
required:
- terms
example:
terms:
- ["exact", "precise"]
- ["phrase"]
- ["match", "search"]
examples:
# Basic Query Examples
simple_term:
summary: Simple Term Query
value:
term: "search"
field: "title"
boost: 2.0
simple_match:
summary: Simple Match Query
value:
match: "full text search"
field: "content"
operator: "and"
fuzzy_search:
summary: Fuzzy Search
value:
term: "search"
field: "title"
fuzziness: "auto"
prefix_length: 2
# Boolean Query Examples
complex_boolean:
summary: Complex Boolean Query
value:
must:
- term: "important"
field: "status"
- match: "urgent"
field: "title"
should:
- match: "critical"
field: "content"
- match: "priority"
field: "tags"
must_not:
- term: "archived"
field: "status"
filter:
- term: "published"
field: "status"
boost: 1.5
# Range Query Examples
price_range:
summary: Price Range Query
value:
min: 10.0
max: 100.0
inclusive_min: true
inclusive_max: false
field: "price"
date_range:
summary: Date Range Query
value:
start: "2023-01-01T00:00:00Z"
end: "2023-12-31T23:59:59Z"
inclusive_start: true
inclusive_end: true
field: "created_at"
# Geographic Query Examples
geo_distance:
summary: Geographic Distance Query
value:
location: [-122.4194, 37.7749]
distance: "10km"
field: "location"
geo_bounding_box:
summary: Geographic Bounding Box Query
value:
top_left: [-122.5, 37.8]
bottom_right: [-122.3, 37.7]
field: "location"
# Vector Query Examples
knn_search:
summary: K-Nearest Neighbors Query
value:
field: "embedding"
vector: [0.1, 0.2, 0.3, 0.4, 0.5]
k: 10
boost: 1.0
# Query String Examples
query_string:
summary: Query String Query
value:
query: "title:search AND (content:full text OR content:search) AND -status:archived"
responses:
ValidationSuccess:
description: Query validation successful
content:
application/json:
schema:
type: object
properties:
valid:
type: boolean
example: true
query_type:
type: string
example: "term"
message:
type: string
example: "Query is valid"
ValidationError:
description: Query validation failed
content:
application/json:
schema:
type: object
properties:
valid:
type: boolean
example: false
error:
type: string
example: "unknown query type"
details:
type: string
example: "No recognized query fields found"
externalDocs:
description: Bleve Documentation
url: https://github.com/blevesearch/bleve