Conversation
Search API v2 (`/v2/search/_els`) returns no hit filtering `_id` on request body (`term`/`terms`) and mishandles composed query string conditions, dropping unrecognized clauses and returning the whole catalog. Requests with product IDs filter are now sent with `_id` alone on `q` param, with other query filters, ordering (by the requested IDs) and pagination (re)applied client side. Complex searches (with aggregations) not filtering by `_id` are unchanged, as well as any search without product IDs filter. Fixes recommended items, buy together, account favorites and kit composition on stores consuming Search API v2. Ref.: ecomplus/storefront#1306 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Calma, mas aí a solução é o filtro por _id funcionar, não essa volta aqui... |
|
Concordo — o conserto certo é o filtro por A pergunta que decide o destino dela: alguém pode assumir o P1 no proxy (
Obs.: a vitrine de recomendados do carrinho/checkout no cloud-commerce (ecomplus/cloud-commerce#812) busca via |
Resolve o lado cliente de ecomplus/storefront#1306.
Problema
Na Search API v2 (
ecomplus.io/v2/search/_els) não existe forma de filtrar por_idque funcione no body da request:terms/termsobre_id→ 0 hits (o mesmo doc é encontrado porsku);ids,match,bool.must…) são descartadas e a busca devolve o catálogo inteiro;q=_id:("A" "B") AND available:truederruba doc que éavailable: true, e a forma que o kit emite hoje (q=visible:true AND _id:(...)viafetch(true)) devolve o catálogo inteiro (total: 167).O que funciona de forma confiável na v2:
q=_id:("A" "B")sozinho (GET). Ranges (quantity:>0,[1 TO *]) esortnão funcionam no GET.Como
setProductIds()montaterms._idno body, todo consumidor quebra silenciosamente (v-if="items.length"): vitrine de recomendados no carrinho/checkout, compre junto, favoritos da conta e composição de kit. Na v1 (apx-search) tudo isso funciona — por isso as lojas do template v2 não perceberam; as lojas Cloud Commerce apontam para a v2 viaECOMCLIENT_API_SEARCHe estão com essas vitrines vazias.Solução
Quando a query tem filtro por
_id(e semaggsno modo complexo), ofetch():q=_id:("..." ...)&size=<n>via GET;term/terms/range, com resolução de campo pontilhado) no cliente, sobre o_source— regra não verificável mantém o item (conservador);sales/offersusa script painless e não é reproduzível no cliente);from/sizeno cliente e ajustahits.totalpara o total filtrado — corrige de tabela o "ver mais" do RecommendedItems, que dependia de um total inconsistente.Buscas sem
_idnão mudam em nada (POST DSL com aggregations, como hoje). Busca por_idcomaggsno modo complexo (página de coleção com UI de filtros) também não muda — na v1 continua funcionando como sempre; na v2 continua como está hoje, documentado como limitação.De quebra, corrige o
ANDdangling do tradutor simple-search quando o primeiro filtro não éterm/terms(umrangena primeira posição geravaq= AND ...).Testes
Build real (
npm run build) e execução dodist/ecom-search.node.jscontra as duas APIs, loja 1024:range quantity>0+term availablesetPageSize(1).setPageNumber(2)total= filtradofetch(true)com 2 idsskusem_idaggregationsaggregations*na v1 são 3 porque o doc "sem estoque" tem estoque no índice v1 (defasado) — o filtro client-side respeita os dados do índice consultado, como deve.
standardlimpo no arquivo alterado.Limitações e follow-ups
aggregationsna resposta quando a rota por_idé usada (os quatro consumidores afetados não as usam — RecommendedItems e BuyTogether deletamaggs, kit usafetch(true)).sales/offersvira ordem dos ids pedidos.@ecomplus/storefront-components/storefront-apppara as lojas herdarem.🤖 Generated with Claude Code