Skip to content

Models search

Search Models

These are the models used by the search methods. search returns a SearchResults object, facet_search returns a FacetSearchResults object, and search_similar_documents returns a SimilarSearchResults object. Hybrid, Personalize, and the Federation models are passed into the search methods to control how the search is run.

Search Models API

meilisearch_python_sdk.models.search

T module-attribute

T = TypeVar('T')

FacetHits

Bases: CamelBase

Source code in meilisearch_python_sdk/models/search.py
class FacetHits(CamelBase):
    value: str
    count: int

value instance-attribute

value: str

count instance-attribute

count: int

FacetSearchResults

Bases: CamelBase

Source code in meilisearch_python_sdk/models/search.py
class FacetSearchResults(CamelBase):
    facet_hits: list[FacetHits]
    facet_query: str | None
    processing_time_ms: int

facet_hits instance-attribute

facet_hits: list[FacetHits]

facet_query instance-attribute

facet_query: str | None

processing_time_ms instance-attribute

processing_time_ms: int

Hybrid

Bases: CamelBase

Source code in meilisearch_python_sdk/models/search.py
class Hybrid(CamelBase):
    semantic_ratio: float
    embedder: str

semantic_ratio instance-attribute

semantic_ratio: float

embedder instance-attribute

embedder: str

MergeFacets

Bases: CamelBase

Source code in meilisearch_python_sdk/models/search.py
class MergeFacets(CamelBase):
    max_values_per_facet: int

max_values_per_facet instance-attribute

max_values_per_facet: int

Federation

Bases: CamelBase

Source code in meilisearch_python_sdk/models/search.py
class Federation(CamelBase):
    limit: int = 20
    offset: int = 0
    facets_by_index: dict[str, list[str]] | None = None
    distinct: str | None = None

limit class-attribute instance-attribute

limit: int = 20

offset class-attribute instance-attribute

offset: int = 0

facets_by_index class-attribute instance-attribute

facets_by_index: dict[str, list[str]] | None = None

distinct class-attribute instance-attribute

distinct: str | None = None

FederationMerged

Bases: Federation

Source code in meilisearch_python_sdk/models/search.py
class FederationMerged(Federation):
    merge_facets: MergeFacets | None

merge_facets instance-attribute

merge_facets: MergeFacets | None

FederationOptions

Bases: CamelBase

Source code in meilisearch_python_sdk/models/search.py
class FederationOptions(CamelBase):
    weight: float

weight instance-attribute

weight: float

Personalize

Bases: CamelBase

Source code in meilisearch_python_sdk/models/search.py
class Personalize(CamelBase):
    user_context: str

user_context instance-attribute

user_context: str

SearchParams

Bases: CamelBase

Source code in meilisearch_python_sdk/models/search.py
class SearchParams(CamelBase):
    index_uid: str
    query: str | None = Field(None, alias="q")
    federation_options: FederationOptions | None = None
    offset: int = 0
    limit: int = 20
    filter: Filter | None = None
    facets: list[str] | None = None
    attributes_to_retrieve: list[str] = ["*"]
    attributes_to_crop: list[str] | None = None
    crop_length: int = 200
    attributes_to_highlight: list[str] | None = None
    sort: list[str] | None = None
    show_matches_position: bool = False
    highlight_pre_tag: str = "<em>"
    highlight_post_tag: str = "</em>"
    crop_marker: str = "..."
    matching_strategy: Literal["all", "last", "frequency"] = "last"
    hits_per_page: int | None = None
    page: int | None = None
    attributes_to_search_on: list[str] | None = None
    show_ranking_score: bool = False
    show_ranking_score_details: bool = False
    ranking_score_threshold: float | None = None
    vector: list[float] | None = None
    hybrid: Hybrid | None = None
    locales: list[str] | None = None
    retrieve_vectors: bool | None = None
    media: JsonMapping | None = None
    show_performance_details: bool | None = None
    personalize: Personalize | None = None

    @field_validator("ranking_score_threshold", mode="before")  # type: ignore[attr-defined]
    @classmethod
    def validate_ranking_score_threshold(cls, v: float | None) -> float | None:
        if v and not 0.0 <= v <= 1.0:
            raise MeilisearchError("ranking_score_threshold must be between 0.0 and 1.0")

        return v

index_uid instance-attribute

index_uid: str

query class-attribute instance-attribute

query: str | None = Field(None, alias='q')

federation_options class-attribute instance-attribute

federation_options: FederationOptions | None = None

offset class-attribute instance-attribute

offset: int = 0

limit class-attribute instance-attribute

limit: int = 20

filter class-attribute instance-attribute

filter: Filter | None = None

facets class-attribute instance-attribute

facets: list[str] | None = None

attributes_to_retrieve class-attribute instance-attribute

attributes_to_retrieve: list[str] = ['*']

attributes_to_crop class-attribute instance-attribute

attributes_to_crop: list[str] | None = None

crop_length class-attribute instance-attribute

crop_length: int = 200

attributes_to_highlight class-attribute instance-attribute

attributes_to_highlight: list[str] | None = None

sort class-attribute instance-attribute

sort: list[str] | None = None

show_matches_position class-attribute instance-attribute

show_matches_position: bool = False

highlight_pre_tag class-attribute instance-attribute

highlight_pre_tag: str = '<em>'

highlight_post_tag class-attribute instance-attribute

highlight_post_tag: str = '</em>'

crop_marker class-attribute instance-attribute

crop_marker: str = '...'

matching_strategy class-attribute instance-attribute

matching_strategy: Literal["all", "last", "frequency"] = (
    "last"
)

hits_per_page class-attribute instance-attribute

hits_per_page: int | None = None

page class-attribute instance-attribute

page: int | None = None

attributes_to_search_on class-attribute instance-attribute

attributes_to_search_on: list[str] | None = None

show_ranking_score class-attribute instance-attribute

show_ranking_score: bool = False

show_ranking_score_details class-attribute instance-attribute

show_ranking_score_details: bool = False

ranking_score_threshold class-attribute instance-attribute

ranking_score_threshold: float | None = None

vector class-attribute instance-attribute

vector: list[float] | None = None

hybrid class-attribute instance-attribute

hybrid: Hybrid | None = None

locales class-attribute instance-attribute

locales: list[str] | None = None

retrieve_vectors class-attribute instance-attribute

retrieve_vectors: bool | None = None

media class-attribute instance-attribute

media: JsonMapping | None = None

show_performance_details class-attribute instance-attribute

show_performance_details: bool | None = None

personalize class-attribute instance-attribute

personalize: Personalize | None = None

validate_ranking_score_threshold classmethod

validate_ranking_score_threshold(
    v: float | None,
) -> float | None
Source code in meilisearch_python_sdk/models/search.py
@field_validator("ranking_score_threshold", mode="before")  # type: ignore[attr-defined]
@classmethod
def validate_ranking_score_threshold(cls, v: float | None) -> float | None:
    if v and not 0.0 <= v <= 1.0:
        raise MeilisearchError("ranking_score_threshold must be between 0.0 and 1.0")

    return v

SearchResults

Bases: CamelBase, Generic[T]

Source code in meilisearch_python_sdk/models/search.py
class SearchResults(CamelBase, Generic[T]):
    hits: list[T]
    offset: int | None = None
    limit: int | None = None
    estimated_total_hits: int | None = None
    processing_time_ms: int
    query: str
    facet_distribution: JsonDict | None = None
    facet_stats: JsonDict | None = None
    total_pages: int | None = None
    total_hits: int | None = None
    page: int | None = None
    hits_per_page: int | None = None
    semantic_hit_count: int | None = None
    query_vector: list[float] | None = None
    performance_details: JsonDict | None = None

hits instance-attribute

hits: list[T]

offset class-attribute instance-attribute

offset: int | None = None

limit class-attribute instance-attribute

limit: int | None = None

estimated_total_hits class-attribute instance-attribute

estimated_total_hits: int | None = None

processing_time_ms instance-attribute

processing_time_ms: int

query instance-attribute

query: str

facet_distribution class-attribute instance-attribute

facet_distribution: JsonDict | None = None

facet_stats class-attribute instance-attribute

facet_stats: JsonDict | None = None

total_pages class-attribute instance-attribute

total_pages: int | None = None

total_hits class-attribute instance-attribute

total_hits: int | None = None

page class-attribute instance-attribute

page: int | None = None

hits_per_page class-attribute instance-attribute

hits_per_page: int | None = None

semantic_hit_count class-attribute instance-attribute

semantic_hit_count: int | None = None

query_vector class-attribute instance-attribute

query_vector: list[float] | None = None

performance_details class-attribute instance-attribute

performance_details: JsonDict | None = None

SearchResultsWithUID

Bases: SearchResults, Generic[T]

Source code in meilisearch_python_sdk/models/search.py
class SearchResultsWithUID(SearchResults, Generic[T]):
    index_uid: str

index_uid instance-attribute

index_uid: str

SearchResultsFederated

Bases: CamelBase, Generic[T]

Source code in meilisearch_python_sdk/models/search.py
class SearchResultsFederated(CamelBase, Generic[T]):
    hits: list[T]
    offset: int | None = None
    limit: int | None = None
    estimated_total_hits: int | None = None
    processing_time_ms: int
    facet_distribution: JsonDict | None = None
    facet_stats: JsonDict | None = None
    total_pages: int | None = None
    total_hits: int | None = None
    page: int | None = None
    hits_per_page: int | None = None
    semantic_hit_count: int | None = None
    facets_by_index: JsonDict | None = None

hits instance-attribute

hits: list[T]

offset class-attribute instance-attribute

offset: int | None = None

limit class-attribute instance-attribute

limit: int | None = None

estimated_total_hits class-attribute instance-attribute

estimated_total_hits: int | None = None

processing_time_ms instance-attribute

processing_time_ms: int

facet_distribution class-attribute instance-attribute

facet_distribution: JsonDict | None = None

facet_stats class-attribute instance-attribute

facet_stats: JsonDict | None = None

total_pages class-attribute instance-attribute

total_pages: int | None = None

total_hits class-attribute instance-attribute

total_hits: int | None = None

page class-attribute instance-attribute

page: int | None = None

hits_per_page class-attribute instance-attribute

hits_per_page: int | None = None

semantic_hit_count class-attribute instance-attribute

semantic_hit_count: int | None = None

facets_by_index class-attribute instance-attribute

facets_by_index: JsonDict | None = None

SimilarSearchResults

Bases: CamelBase, Generic[T]

Source code in meilisearch_python_sdk/models/search.py
class SimilarSearchResults(CamelBase, Generic[T]):
    hits: list[T]
    id: str
    processing_time_ms: int
    limit: int | None = None
    offset: int | None = None
    estimated_total_hits: int | None = None

hits instance-attribute

hits: list[T]

id instance-attribute

id: str

processing_time_ms instance-attribute

processing_time_ms: int

limit class-attribute instance-attribute

limit: int | None = None

offset class-attribute instance-attribute

offset: int | None = None

estimated_total_hits class-attribute instance-attribute

estimated_total_hits: int | None = None