En esta página, se describe cómo filtrar y ordenar con la búsqueda.
Instructivo de filtrado
En este instructivo, se muestra la función de filtrado. Te permite ajustar mejor las solicitudes de búsqueda según tus necesidades o las del cliente. Puedes filtrar por uno o varios campos, por campos de texto o numéricos, o por ambos. Puedes usar un lenguaje de expresión a fin de construir un predicado para cada campo o combinar diferentes expresiones mediante operadores lógicos. Por ejemplo, un comprador que busca zapatos puede usar filtros para limitar su búsqueda a la marca y el color que prefiere.
Para seguir la guía paso a paso sobre esta tarea directamente en el editor de Cloud Shell, haz clic en Guiarme:
Instructivo de ordenamiento
En este instructivo, se muestra cómo ordenar elementos en una respuesta de búsqueda. Cuando un usuario final busca un producto en tu sitio, se le muestran resultados ordenados por varios campos. Por ejemplo, un usuario busca el vestido con el mejor precio y descuento. El precio y el descuento son varios campos aquí. El usuario verá los vestidos ordenados por precio y, para los vestidos con el mismo precio, ordenados por descuento.
Para seguir la guía paso a paso sobre esta tarea directamente en el editor de Cloud Shell, haz clic en Guiarme:
Conjunto de datos de ejemplo
En esta página, se usa el siguiente conjunto de datos como ejemplo. Solo se incluyen los campos necesarios para el ejemplo.
Filtro
Java
Se puede resumir la sintaxis de la expresión de filtro con la siguiente EBNF:
# A single expression or multiple expressions that are joined by "AND" or "OR". filter = expression, { " AND " | "OR", expression }; # Expressions can be prefixed with "-" or "NOT" to express a negation. expression = [ "-" | "NOT " ], # A parenthetical expression. | "(", expression, ")" # A simple expression applying to a text field. # Function "ANY" returns true if the field contains any of the literals. ( text_field, ":", "ANY", "(", literal, { ",", literal }, ")" # A simple expression applying to a numerical field. Function "IN" returns true # if a field value is within the range. By default, lower_bound is inclusive and # upper_bound is exclusive. | numerical_field, ":", "IN", "(", lower_bound, ",", upper_bound, ")" # A simple expression that applies to a numerical field and compares with a double value. | numerical_field, comparison, double ); # A lower_bound is either a double or "*", which represents negative infinity. # Explicitly specify inclusive bound with the character 'i' or exclusive bound # with the character 'e'. lower_bound = ( double, [ "e" | "i" ] ) | "*"; # An upper_bound is either a double or "*", which represents infinity. # Explicitly specify inclusive bound with the character 'i' or exclusive bound # with the character 'e'. upper_bound = ( double, [ "e" | "i" ] ) | "*"; # Supported comparison operators. comparison = "<=" | "<" | ">=" | ">" | "="; # A literal is any double quoted string. You must escape backslash (\) and # quote (") characters. literal = double quoted string; text_field = see the table below; numerical_field = see the table below;
Los campos de texto admitidos se resumen en la siguiente tabla.
Campo | description |
---|---|
"productId" | El ID del producto (el último segmento de Product.name). |
“marcas” | El atributo Product.Brands. |
"categories" | The Product.categories. |
"genders" | The Audience.genders. |
"ageGroups" | The Audience.age_groups. |
“disponibilidad” | El atributo Product.availability. El valor es uno de los siguientes: "IN_STOCK", "OUT_OF_STOCK" "PREORDER" o "BACKORDER". |
"colorFamilies" | El atributo ColorInfo.color_families. |
"colors" | The ColorInfo.colors. |
"sizes" | El atributo Product.sizes. |
"materials" | El atributo Product.materials. |
"patterns" | El atributo Product.patrones. |
"conditions" | El atributo Product.condition. |
“attributes.key” | El atributo personalizado textual en el objeto Product. La clave puede ser cualquier clave en el mapa Product.attributes, si los valores de atributos son textuales. |
"pickupInStore" | El atributo FulfillmentInfo.place_ids para el tipo “pick-in-store”. |
"shipToStore" | El atributo FulfillmentInfo.place_ids para el tipo “ship-to-store”. |
"sameDayDelivery" | El atributo FulfillmentInfo.place_ids para el tipo “same-day-Delivery”. |
"nextDayDelivery" | El atributo FulfillmentInfo.place_ids para el tipo “Next-day-Delivery”. |
"customFulfillment1" | El atributo FulfillmentInfo.place_ids para el tipo “custom-type-1”. |
"customFulfillment2" | El atributo FulfillmentInfo.place_ids para el tipo “custom-type-2”. |
"customFulfillment3" | El atributo FulfillmentInfo.place_ids para el tipo “custom-type-3”. |
"customFulfillment4" | El atributo FulfillmentInfo.place_ids para el tipo “custom-type-4”. |
"customFulfillment5" | El atributo FulfillmentInfo.place_ids para el tipo “custom-type-5”. |
“inventory(place_id,attributes.key)” | El atributo personalizado de texto en inventario. |
Los campos numéricos compatibles se resumen en la siguiente tabla.
Campo | description |
---|---|
"price" | The PriceInfo.price. |
"discount" | El descuento Calculado por (original_price - price) / original_price. |
"rating" | The Rating.average_rating. |
"ratingCount" | The Rating.rating_count. |
“attributes.key” | El atributo numérico personalizado del objeto Product. La clave puede ser cualquier clave en el mapa Product.attributes, si los valores del atributo son numéricos. |
“inventory(place_id,price)” | Es el precio del inventario. |
“inventory(place_id,original_price)” | Es el precio original del inventario. |
“inventory(place_id,attributes.key)” | El atributo personalizado numérico del inventario. |
Se permite un máximo de 10 conjunciones o disyunciones anidadas.
Por ejemplo, para buscar un producto de Google en las siguientes situaciones, respectivamente, puedes establecer query
como “Google” y filter
como los valores que se muestran en la siguiente tabla:
situación | filtro |
---|---|
no es un adaptador de Pixel | “NO pertenecen a categorías: ANY(\“Pixel > Accesorios destacados\”)” |
“más económico de 100 dólares” | “precio: IN(*, 100.0e)” |
“Parlante Nest a menos de 80 dólares” | “(categorías: ANY(\“Nest > altavoces y pantallas\”)) AND (precio: IN(80.0i, *))” |
Pedido
Java
Los campos ordenables admitidos se resumen en la siguiente tabla.
Campo | description |
---|---|
"productId" | El ID del producto (el último segmento de Product.name). |
"title" | The Product.title. |
“marcas” | El atributo Product.Brands. |
"categories" | The Product.categories. |
"genders" | The Audience.genders. |
"ageGroups" | The Audience.age_groups. |
"price" | The PriceInfo.price. |
"discount" | El descuento Calculado por (original_price - price) / price. |
"rating" | The Rating.average_rating. |
"ratingCount" | The Rating.rating_count. |
“attributes.key” | El atributo personalizado del objeto Product. La clave puede ser cualquier clave en el mapa Product.attributes. |
“inventory(place_id,price)” | Es el precio del inventario. |
“inventory(place_id,original_price)” | Es el precio original del inventario. |
“inventory(place_id,attributes.key)” | El atributo personalizado numérico o textual en el inventario. |
De forma predeterminada, el orden es ascendente. El orden descendente se puede especificar con "desc" sufijo, como “rating desc”.
Para un campo numérico con varios valores, por ejemplo, un campo repetido o una campo establecido para las variantes de productos, el valor mínimo se utiliza para ordenar por el orden ascendente, y el valor máximo se usa para ordenar por orden descendente.
El orden de múltiples campos se admite mediante el uso de campos separados por comas en orden de prioridad. Los campos de menor prioridad se usan para ordenar los elementos con valores iguales para los campos de mayor prioridad. Por ejemplo, "rating desc, price" ordenaría elementos con la misma calificación por precio.