En esta página se describe cómo filtrar y ordenar con la búsqueda.
El filtrado semántico optimiza la ordenación no predeterminada
Vertex AI Search para el comercio se ha diseñado para mostrar una amplia variedad de resultados, incluidos los artículos marginalmente relevantes que son populares o están de moda. Esto es eficaz en las búsquedas predeterminadas (ordenadas por relevancia), pero en las búsquedas no predeterminadas que usan la función order_by
, como la de ordenar por precio, los elementos menos relevantes pueden aparecer de forma más destacada debido a un precio más bajo, por ejemplo.
Para mitigar este efecto, Vertex AI Search for commerce ha introducido un filtro basado en embeddings semánticos para eliminar estos elementos menos relevantes de los resultados de búsqueda no predeterminados, lo que mejora la experiencia de usuario.
Sin embargo, este comportamiento podría dar lugar a menos resultados de búsqueda en general. Si inhabilitas el filtrado, puede que la calidad de los resultados de búsqueda se vea afectada. Por lo tanto, si te preocupa que haya menos resultados de búsqueda, ponte en contacto con el equipo de Asistencia.
Tutorial de filtrado
En este tutorial se muestra la función de filtrado. Te permite ajustar las solicitudes de búsqueda según tus necesidades o las de tus clientes. Puede filtrar por uno o varios campos, por campos de texto o numéricos, o por ambos. Puede usar un lenguaje de expresiones para crear un predicado para cada campo o combinar diferentes expresiones mediante operadores lógicos. Por ejemplo, un comprador que busque zapatos puede usar filtros para acotar la búsqueda a su marca y color preferidos.
Para seguir las instrucciones paso a paso de esta tarea directamente en el editor de Cloud Shell, haz clic en Ayúdame:
Tutorial de pedidos
En este tutorial se explica cómo ordenar los elementos de una respuesta de búsqueda. Cuando un usuario final busca un producto en su sitio, se le muestran los resultados ordenados por varios campos. Por ejemplo, un usuario está buscando un vestido con el mejor precio y descuento. El precio y el descuento son varios campos. El usuario verá los vestidos ordenados por precio y, en el caso de los vestidos con el mismo precio, por descuento.
Para seguir las instrucciones paso a paso de esta tarea directamente en el editor de Cloud Shell, haz clic en Ayúdame:
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
La sintaxis de la expresión de filtro se puede resumir 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). |
"brands" | Los Product.brands. |
"categories" | El valor de Product.categories. |
"genders" | Audience.genders. |
"ageGroups" | Audience.age_groups. |
"availability" | Product.availability. El valor es uno de los siguientes: "IN_STOCK", "OUT_OF_STOCK", "PREORDER" o "BACKORDER". |
"colorFamilies" | ColorInfo.color_families. |
"colors" | ColorInfo.colors. |
"sizes" | Product.sizes. |
"materials" | The Product.materials. |
"patterns" | Product.patterns. |
"conditions" | The Product.conditions. |
"attributes.key" | Atributo personalizado de texto del objeto Product. La clave puede ser cualquier clave del mapa Product.attributes si los valores de los atributos son textuales. |
"pickupInStore" | Los FulfillmentInfo.place_ids del tipo "pickup-in-store". |
"shipToStore" | Los FulfillmentInfo.place_ids del tipo "ship-to-store". |
"sameDayDelivery" | Los FulfillmentInfo.place_ids del tipo "same-day-delivery". |
"nextDayDelivery" | Los FulfillmentInfo.place_ids del tipo "next-day-delivery". |
"customFulfillment1" | Los FulfillmentInfo.place_ids del tipo "custom-type-1". |
"customFulfillment2" | Los FulfillmentInfo.place_ids del tipo "custom-type-2". |
"customFulfillment3" | Los FulfillmentInfo.place_ids del tipo "custom-type-3". |
"customFulfillment4" | Los FulfillmentInfo.place_ids del tipo "custom-type-4". |
"customFulfillment5" | Los FulfillmentInfo.place_ids del tipo "custom-type-5". |
"inventory(place_id,attributes.key)" | El atributo personalizado de texto del inventario. |
En la siguiente tabla se resumen los campos numéricos admitidos.
campo | description |
---|---|
"price" | El PriceInfo.price. |
"discount" | El descuento. Se calcula como (precio_original - precio) / precio_original. |
"rating" | Rating.average_rating. |
"ratingCount" | Rating.rating_count. |
"attributes.key" | Atributo personalizado numérico del objeto Product. La clave puede ser cualquier clave del mapa Product.attributes si los valores de los atributos son numéricos. |
"inventory(place_id,price)" | El precio del inventario. |
"inventory(place_id,original_price)" | El precio de inventario original. |
"inventory(place_id,attributes.key)" | Atributo personalizado numérico del inventario. |
Se permiten 10 conjunciones o disyunciones anidadas como máximo.
Por ejemplo, para buscar un producto de Google en las siguientes situaciones, puedes definir query
como "Google" y filter
como los valores que se muestran en la siguiente tabla:
situación | filtrar |
---|---|
No es un accesorio Pixel | "NOT categories: ANY(\"Pixel > featured accessories\")" |
"más barato que 100 dólares" | "price: IN(*, 100.0e)" |
"Altavoz Nest no más barato de 80 euros" | "(categories: ANY(\"Nest > speakers and displays\")) AND (price: IN(80.0i, *))" |
Ordenar
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" | El Product.title. |
"brands" | Los Product.brands. |
"categories" | El valor de Product.categories. |
"genders" | Audience.genders. |
"ageGroups" | Audience.age_groups. |
"price" | El PriceInfo.price. |
"discount" | El descuento. Se calcula como (precio_original - precio) / precio. |
"rating" | Rating.average_rating. |
"ratingCount" | Rating.rating_count. |
"attributes.key" | El atributo personalizado del objeto Product. La clave puede ser cualquier clave del mapa Product.attributes. |
"inventory(place_id,price)" | El precio del inventario. |
"inventory(place_id,original_price)" | El precio de inventario original. |
"inventory(place_id,attributes.key)" | El atributo personalizado numérico o de texto del inventario. |
De forma predeterminada, el orden es ascendente. El orden descendente se puede especificar con el sufijo "desc", como "rating desc".
En el caso de un campo numérico con varios valores (por ejemplo, un campo repetido o un campo configurado para productos variantes), el valor mínimo se usa para ordenar los resultados de forma ascendente y el valor máximo, para ordenarlos de forma descendente.
Se puede ordenar por varios campos usando campos separados por comas en orden de prioridad. Los campos de menor prioridad se usan para ordenar los elementos con valores iguales en los campos de mayor prioridad. Por ejemplo, "rating desc, price" ordena los elementos con la misma valoración por precio.