- Additive: Query.IncludeFields, ExcludeFields and Highlight; left empty,
the Typesense request is the same as before.
- SearchResult.Hits holds one Hit per id, in step with IDs; SearchPage
always fills it.
- Snippets are plain-text Segment runs split at private-use highlight tags,
never HTML; MaxSnippetsPerArray is applied client-side.
- Optional HighlightSearcher capability, checked with SupportsHighlights
(true for Typesense, false for null and third-party engines).
- README and docs: Highlights sections with the rule that a caller drops
the hit of every id failing the SQL re-check before showing a snippet.
Targets framework v0.6.4 (additive, no breaking change).
- optional IndexDropper reports whether a dropped index existed; DropIndex falls back to Flush
- optional IndexEnsurer creates an empty index from its schema; EnsureIndex is a no-op otherwise
- typesense implements both (404 is already absent; ensure reuses collection creation)
- optional beachcomber.PageSearcher returns a page of candidate ids plus
the engine's found count; beachcomber.SearchPage falls back to
SearchIDs for engines without it, so Engine is unchanged
- Query.QueryByWeights is sent to Typesense as query_by_weights; a
mismatched weight list or a page above typesense.MaxPerPage (250) is
refused before any request