fix(fetch): workaround Search API v2 to fix products search by IDs - #324
Open
vitorrgg wants to merge 1 commit into
Open
fix(fetch): workaround Search API v2 to fix products search by IDs#324vitorrgg wants to merge 1 commit into
vitorrgg wants to merge 1 commit into
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>
Member
|
Calma, mas aí a solução é o filtro por _id funcionar, não essa volta aqui... |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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