Alain Russell
06/15/2026, 10:49 AMq=*) with a filter_by that defines the category. Merchandisers pin products and set a curated sort per category, which we’d been storing as curation overrides matched on rule.filter_by.
Problem: rule.filter_by has to match the request’s filter_by exactly. So the moment a shopper ticks a facet (e.g. adds && size:=M), the request’s filter_by no longer matches the rule, the override stops applying, and the pins + curated sort disappear instantly.
Our POC fix: stop relying on stored-rule matching for browse. At query time we read the campaign’s curation and inject it as native params - pinned_hits + hidden_hits + sort_by, with filter_curated_hits=true - so they work with the filter_by instead of getting dropped. (search campigns use overrides since they match on q, which filtering doesn’t change.)
The reason we took this approach was to avoid a “mapping” process, it means PLP for us is now almost instant on save in our Navigstion maping module.
Example - “Mens Shoes”, pin SKUs A, B, C, curated sort `trending:desc`:
• Shopper selects Size 10
• Request: filter_by = <category> && size:=10, pinned_hits = A:1,B:2,C:3, sort_by = trending:desc, filter_curated_hits = true
• Result: B (no size 10) slides out, A & C hold their pinned positions, trending sort persists ✅
Two things we’d like to confirm:
1. Is query-time`pinned_hits`/`sort_by`the right pattern here, or is there a cleaner native way to keep a stored curation applying when the request filter_by is a superset of the rule’s`filter_by`?
2. Does`hidden_hits`also remove those docs from`facet_counts`/ numeric stats, or only from the returned hits? (We’re propagating`hidden_hits` into our facet + histogram sub-queries to keep counts/range bounds consistent, but want to know the intended behaviour.)Fanis Tharropoulos
06/15/2026, 10:58 AMYusuf Sultan
06/16/2026, 4:21 AMGitte Dreyer
06/18/2026, 8:50 AMq and multiple query_by fields. Is this expected behavior or does it sound like a flawed request body?Olivier
06/19/2026, 1:52 PMsteffen
06/22/2026, 8:00 AMGabriel Delattre
06/24/2026, 7:25 PMprecision clustering can return the number of elements in each cluster (a _group_found style count), which is what's needed for map clustering UIs. Right now the found key returns the total, not per-cluster counts.
Any news on this? Is per-cluster counting planned or available in a recent build?
Thanks.Josh Hall
06/27/2026, 6:23 PMAadarsh
07/01/2026, 5:27 AMgoogle is not supported."}`. I am using typesense v30.2
✗ curl -H "X-TYPESENSE-API-KEY: ${TYPESENSE_API_KEY}" <http://localhost:8108/debug>
{"state":1,"version":"30.2"}
CODE:
model_config = {
"api_key": GEMINI_API_KEY,
"model_name": GEMINI_MODEL_NAME,
"history_collection": HISTORY_COLLECTION_NAME,
"max_bytes": 16384,
"system_prompt": "You are an assistant for question-answering. You can only make conversations based on the provided context. If a response cannot be formed strictly using the provided context, politely say you do not have knowledge about that topic.",
}
create_model = tse.client.conversations_models.create(model=model_config)
print(create_model)
OUTPUT:
typesense.exceptions.RequestMalformed: [Errno 400] Gemini API error: {"message":"Bad request."}Mark Smith
07/02/2026, 9:16 AMsteffen
07/05/2026, 2:30 PMTIP
Since vector search queries tend to be large because of the large dimension of the query vector, we are using theas per the typesense documentation? I guess any query (whether vector or not) could simply useend-point that sends the search parameters as a POST request body.multi_search
QUERY over GET or POST now. In terms of backwards compatibility, just adding the QUERY method might not hurt actually. Have you had any thoughts on that at all yet? The typesense API just feels like a 100% fit for that new method, 😅James Kirkby
07/07/2026, 2:20 PMtypesense-instantsearch-adapter, is there a timeline for this change to be versioned and published? github.com/typesense/typesense-instantsearch-adapter/pull/274
It doesn't look like it's part of the latest version (3.0.2) which has been publishedsteffen
07/08/2026, 9:18 AMtypesense.exceptions.RequestMalformed: [Errno 400]
Malformed vector query string: could not find a field named `embedding`.
Investigation:
There have been issues with the customer's LLM Proxy Provider, leading to Typesense not able to generate the embedding. Typesense seems to decide on its own to drop the embedding entirely from the collection.
Consequences:
Once the LLM Proxy Provider is available again, we need to redeploy our services, setting up Typesense collections. Once done, Typesense has to go through all documents, checking whether embeddings exist (they aren't likely removed from disk, but just not linked anymore).
Questions:
• Is that behavior indeed intended?
• Are there options to enforce the embedding field to stay, even if the provider has (long-lasting) issues?Nathan Wu
07/13/2026, 7:00 PMRohan Bin Khokon
07/21/2026, 5:45 AMTomas Hauk
07/21/2026, 8:33 AMinclude_fields plays some role in performance, but our observation is that even fields that are not requested, nor queried play a major role in the overall query performance
In particular we have tested: we create multiple collections that are exactly same (schema, documents) except having different embedding field in following variants
• no embedding field
• embedding field with 3072 dimensions
• embedding field with 768 dimensions
On this collections we perform queries that do NOT query this embedding fields (ie. we set include_fields to some other fields than the embedding one described above)
Our performance observation is that even if we have not requested the field and do not search over it (not used in include_fields, query_by or other search params), it plays major role in performance:
| config | est. `per_page=250` | vs today |
|-----------------------------|---------------------|-------------|
| today (3072 dims) | 613 ms | — |
| 768 dims | \~253 ms | 2.4x faster |
| embedding out of collection | \~156 ms | 3.9x faster |
Questions:
• Can you please confirm this hypothesis?
• This is because some kind of deserialization / materialization going on on in Typesense under the hood?
• If so any recommended solutions?
◦ split into multiple collections doing joins?
◦ having enough memory cache?
◦ any other possible workarround / maybe we are doing something wrong?
Thank you very much for clarifications and shedding light into thisShaun Byrnes
07/22/2026, 12:14 AMYou are receiving this communication because one or more of your *Firebase*projects has active installations of Firebase Extensions.
We’re writing to inform you that the Firebase Extensions service is being deprecated and will be decommissioned. Already installed Extensions will continue executing. Please review the details below to understand the upcoming timelines. Migration options will be provided in September 2026.
What you need to know
Key changes:
• Installation and updates cutoff: You can install new extensions or redeploy and update existing extension instances until March 31, 2027. After this date, the Firebase console and Firebase CLI will no longer support installation or configuration modifications for Firebase Extensions.
• Uninterrupted execution of installed extensions: Any extension instances that are already installed before March 31, 2027 will continue to execute normally after the decommissioning date.
Impact after March 31, 2027:
• Inability to modify configurations or update installed instances: You won't be able to re-deploy or update your installed extensions to pick up new code versions, reconfigure parameters, or apply critical bug and security patches through the Firebase Extensions service.
• Loss of management access: You won't be able to edit configurations, or fetch configurations of installed instances (which will be helpful for migration to a new solution later). Service failures may occur if third-party API changes require patches, as you cannot apply these through the Firebase Extensions service.
• Manual deletion required: You won't be able to uninstall extensions via the Firebase console. Instead, to uninstall an extension, you will need to manually delete all its associated Firebase and Google Cloud resources (such as functions, secrets, and service accounts).
What you need to do
• Uninstall unused instances: If you no longer use your installed extensions, uninstall them before March 31, 2027.
• Update active instances: If you actively use your installed extensions, update them to their latest versions now and keep them updated up until March 31, 2027.
• Await migration path: In September 2026, the Firebase team will reach out with comprehensive migration documentation, tools, and detailed transition options. These resources will help you migrate to self-managed functions with similar behavior, which you can continue to update and reconfigure after the Firebase Extensions service decommissioning.
Timelines:
• September 2026: Firebase will release comprehensive migration documentation, tools, and detailed transition options.
• March 31, 2027 (Decommission date): This is the final day to install new extensions or redeploy and update existing instances using current Firebase Extensions functionality.
fagner.sa12
07/22/2026, 11:51 AMAadarsh
07/23/2026, 10:16 AMEhmeedRls
07/24/2026, 1:47 PMfor, and a curation rule (match: exact) that has both a replace_query and a filter_by. Then I search for shoes for men with that stopword set active.
What I see:
- If the rule's rule.query is shoes for men (the raw thing the user types), only replace_query fires — the filter_by is silently dropped.
- If the rule's rule.query is shoes men (what's left after the stopword for is removed), only filter_by fires — the replace_query is silently dropped.
So a single rule ends up evaluated against two different strings. I'd have expected a matched rule to apply all of its actions, and for rule matching to be consistent.michael.hoekema
07/27/2026, 5:55 PMArua de Carvalho
07/28/2026, 3:15 PMfilter_by clauses evaluated independently and then intersected,
with no reordering by selectivity? i.e. is total cost ~ the sum of
the per-clause costs, rather than bounded by the most selective one?
2. Is :!= always computed as the complement of the equality set over
the whole collection?
3. For date:>=a && date:<=b, is the cost proportional to the
documents inside the range, independent of the other clauses in the
same filter?
4. Does range_index:true accelerate the scan across a matched range, or
only the endpoint lookup? We A/B'd identical int64 values in a
range_index field vs a plain one, both AND-ed with the tenant
filter (3M docs, 15 runs): 16/21ms vs 14/19ms for a 450-day range,
no measurable difference.
Our workaround is to fold the tenant into the indexed value: a separate
int64 field tenantDay = tenantId * 100000 + epochDay, so a date window
becomes tenantDay:[t*100000+d1 .. t*100000+d2] instead of a date range,
and the same idea for the status field. Every clause then hits a
tenant-local posting list, with identical found.
Is a composite key the right approach for wide ranges and
low-cardinality fields in a multi-tenant collection, or is there
something supported we're missing? Shard by
tenant as well would mean thousands of collections, so we'd rather notMatthew
07/29/2026, 2:36 AM"The pagination parameters (page, per_page, offset, limit, and limit_hits) of individual searches are ignored. Only global pagination parameters passed as query parameters are considered."So that means even if you have scoped search api keys, anyone can just call multi-search and get past any limit_hits. Thoughts? Thank you! Side note - does anyone have recommendations on how to BOTH (1) benefit from typesense cloud SDN, while at the same time (2) putting it in front of a proxy using anything in AWS? For example, WAF + Cloudfront + AWS Lambda Authorizer?
Matthew
07/30/2026, 3:59 PMid, title, and author_id, where author_id references authors.id
• `authors`: id and full_name
Questions:
1. Can Typesense use this reference in both directions?
• Search books and include the related author’s full_name
• Search authors and include all related books
• Is the reference on books.author_id enough, or is a reverse reference also required on authors?
2. How do scoped search keys work with these joins?
• If the key allows searching books but not authors, can a books query still return joined author fields?
• Must the parent key allow both collections?
• Do scoped filters apply only to the main collection, or also to joined collections?gab gab
07/31/2026, 11:36 AMalimentation, alimentation/*]
→ found: 60
The equivalent exact filter on our denormalized label field returns 167:
categories.fr-CH.lvl0:=Alimentation
→ found: 167
Faceting the truncated result shows exactly what happened — only 4 paths actually drove the match:
24 alimentation/autres-produits/superaliments
16 alimentation/autres-produits/condiments/miso
13 alimentation/fruits-baies-et-noix/produits-de-fruits/fruits-secs
7 alimentation/miel
--- 60 = found
Things that do not help:
• max_candidates (tried up to 10000) — seems to apply only to q, not filter_by
• exhaustive_search=true
Questions
1. Is this 4-value cap on prefix expansion in filter_by intended / documented?
2. Is there a way to raise it for filter_by (a max_candidates equivalent)?
3. If not, what's the recommended way to filter "category + descendants" over a string[] of paths? Enumerating every descendant value in :[...] works, but requires a separate facet query first.
Thanks!Aadarsh
08/04/2026, 7:58 AMbrands collection first and then othersRohan Bin Khokon
08/06/2026, 10:35 AMMatthew
08/07/2026, 2:05 PMindex: false.
But I think the intended meaning is: Either do not mention the fields in the schema, or add them to the schema with index: false.
In other words, are both of these valid ways to make a field unindexed and stored only on disk?Rick Tham
08/09/2026, 8:04 PMtypesense/typesense The ARM64 image from Docker Hub works perfectly on the same machines, suggesting I may be missing something in my build process rather than a general ARM issue.
Before I go too far down the rabbit hole, I was curious if anyone could point me toward how the official ARM64 images are produced. Are they built directly from the public repo with Bazel, or is there a different toolchain, configuration, compiler version, build flags, or CI pipeline involved?
I'm mainly trying to learn the supported build path for both AMD64 and ARM64, and would appreciate any guidance from folks who have worked with the build system.
Thanks in advance!Peter Matulis
08/10/2026, 4:17 AM