A space to discuss GraphQL queries, mutations, troubleshooting, throttling, and best practices.
We use a GraphQL call to retrieve products by their SKU. All of our product SKUs are unique. Some calls however will return multiple SKUs that are near matches. A Hyphen in the SKU seems to be the culprit on why this happens. Is there any way to check for exact matches only?
This is the GraphQL request structure I'm testing with via the GraphiQL App on our account.
{
products(first: 10, query: "sku:SWS-OSCS-1-8") {
edges {
node {
id
variants(first: 1) {
edges {
node {
id
weight
sku
}
}
}
}
}
}
}
So given we have these 3 SKUs
5012FH-Y
5012FH-Y-2PK
5012FH-Y-4PK
If I query with "sku:5012FH-Y", I get all 3 SKUs in the results. If I use 5012FH-Y-2PK, I get only the one matching product.
Now given the following query "sku:SWS-OSCS-1-8" is when I start to see some more unexpected behavior. Although with inspection, I can see a system to it. With this query I will get the following results:
SWS-OSCS-1-14-8
SWS-OSCS-1-38-8
SWS-OSCS-1-8 (the actual match)
SWS-OSCS-1-18-8
...
What I finally discovered is that the - almost acts like a range or wildcard. There can be characters in the "middle" of the SKU where a hyphen exists and it will return as a result. You can see for the given results they all have the same pattern of my qctual query with an additional [ -XX ] pattern. Several categories of our products have a similar SKU structure and are affected by this query. Is there a parameter in the request that I can add that will say I only want exact matches on the SKU? Or possibly is there a way to get the - to not be treated as a wildcard, or range type character?
The alternative is to read if we're getting multiple results from the query, loop through each of them until we verify that we found the correct product and proceed. Not all that difficult but certainly less efficient than just getting the expected result from the query in the first place if that is possible.
Have you found a solution? I am having the exact same issue.
Also having the same problem. Is there really no solution for this?
I haven't, I just resorted to looping through the results and checking for an exact match. Feels like an oversight, would be nice to get an official answer.
What happens if you enclose the sku in single quotes?
"sku:'SWS-OSCS-1-8'"
So, I think the issue is that sku is not part of the product (the parent product, if you will), at least for graphql. You can't return the sku of a product.
It looks like what graphql is doing is wilcard searching variant skus, getting the parent of a matching sku and returning what it finds.
If you're looking for an exact sku match, search the product variants:
query {productVariants(first: 1, query: "sku:aa-bb-cc-xxl") {
edges {
node {
id
weight
sku
availableForSale
compareAtPrice
displayName
harmonizedSystemCode
price
title
weight
weightUnit
contextualPricing(context: {country: CA}) {
price {
amount
currencyCode
}
compareAtPrice {
amount
currencyCode
}
}
}
}
}}