The Query System provides a powerful and flexible framework for defining, executing, and processing vector searches across multi-space indices. It supports dynamic parameter binding, natural language processing, advanced filtering operations, and comprehensive result management with metadata.

Core Query Architecture

Query System Reference

ComponentPurposeKey MethodsUsage
QueryDescriptorQuery construction via fluent APIfind(), similar(), filter(), select(), limit()Method chaining for query building
SimilarFilterClauseUser input similarity searchfrom_param(), evaluate()Text queries, user inputs
LooksLikeFilterClauseItem-based similarity searchfrom_param(), evaluate()Item-to-item recommendations
HardFilterClauseExact field filteringfrom_param(), evaluate()Precise constraint application
QueryParamValueSetterParameter resolution pipelineset_values(), validate_params()Runtime parameter binding
NLQHandlerNatural language processingfill_params(), suggest_improvements()Natural language query support

Query Building and Parameter System

The QueryDescriptor class provides a fluent API for building complex search operations with dynamic parameters. Queries are constructed through method chaining, where each method adds a specific QueryClause to the descriptor.

Core Query Methods

The system provides two primary search methods that can be combined and weighted:
MethodPurposeParametersUsage
similar()Search using user-provided inputspace, param, weightText queries, user inputs
with_vector()Search using stored item vectorsschema, id_param, weightItem-to-item recommendations

Query Execution and Parameter Processing

Query execution involves parameter resolution through the QueryParamValueSetter class, which handles parameter binding, NLQ processing, and clause evaluation.

Parameter Resolution Process

The QueryParamValueSetter coordinates the complete parameter resolution pipeline:
StagePurposeImplementation
append_missing_mandatory_clauses()Adds required clausesLimitClause, RadiusClause, SelectClause
validate_params()Validates parameter namesChecks against clause parameters
__alter_query_descriptor()Applies parameter valuesUpdates clause parameters
__calculate_nlq_params()Processes NLQ parametersCalls NLQHandler.fill_params()
__calculate_default_params()Sets default valuesUses Param.default values

Advanced Query Features

Natural Language Query Processing

The system supports natural language query processing through the NLQClause and NLQHandler classes, which integrate with OpenAI for automated parameter extraction from natural language queries.

Hard Filtering and Comparison Operations

The query system implements hard filtering through HardFilterClause with comprehensive comparison operation support:
Operation TypeImplementationUsage Example
EqualityComparisonOperation.EQUALschema.field == "value"
InequalityComparisonOperation.NOT_EQUALschema.field != "value"
Numeric comparisonComparisonOperation.GREATER_THANschema.price > 100
List operationsComparisonOperation.CONTAINSschema.categories.contains(["tag"])
Combined filters_Or[SchemaField]`(field == “a”)(field == “b”)`

Result Structure and Metadata

Query results are structured through the QueryResult class and related result classes that provide comprehensive search result information and metadata.

Result Classes Implementation

The result system implements structured data through ImmutableBaseModel classes:
ClassPurposeKey Fields
QueryResultTop-level result containerentries, metadata, __str__()
ResultEntryIndividual search resultid, fields, metadata
ResultEntryMetadataPer-result metadatascore, partial_scores, vector_parts
ResultMetadataQuery-level metadataschema_name, search_vector, search_params

Usage Patterns

Basic Query Construction

# Simple semantic search
query = (
    sl.Query(index)
    .find(schema)
    .similar(text_space, sl.Param("query_text"))
    .limit(10)
)

Advanced Multi-Space Query

# Complex query with filtering and weighting
advanced_query = (
    sl.Query(index, weights={
        text_space: sl.Param("text_weight"),
        number_space: sl.Param("number_weight")
    })
    .find(schema)
    .similar(text_space, sl.Param("query_text"))
    .filter(schema.price <= sl.Param("max_price"))
    .filter(schema.category == sl.Param("category"))
    .with_vector(schema, sl.Param("similar_item_id"), weight=0.3)
    .select(schema.title, schema.description, schema.price)
    .limit(sl.Param("limit"))
    .include_metadata()
)

Natural Language Query

# Natural language query processing
nlq_query = (
    sl.Query(index)
    .find(schema)
    .with_natural_query(
        "Find affordable electronics under $500 similar to smartphones",
        nlq_config={"model": "gpt-4", "temperature": 0.1}
    )
    .limit(20)
)
The Query module supports both programmatic and natural language queries, making it accessible to both developers and end-users while maintaining powerful customization capabilities through comprehensive parameter systems and advanced filtering options.
The Query System provides the complete framework for building, executing, and processing complex vector searches with comprehensive support for dynamic parameters, natural language processing, advanced filtering, and structured result management.