Esta página descreve a filtragem e a ordenação com a pesquisa.
Tutorial de filtragem
Este tutorial demonstra o recurso de filtragem. Ele permite ajustar as solicitações de pesquisa de acordo com as suas necessidades ou as de clientes. É possível filtrar por um ou vários campos, por campos de texto ou numéricos ou ambos. Você pode usar uma linguagem de expressão para construir um predicado para cada campo ou combinar diferentes expressões usando operadores lógicos. Por exemplo, um comprador que procura sapatos pode usar filtros para restringir a pesquisa à marca e à cor preferida.
Para seguir as instruções da tarefa diretamente no editor do Cloud Shell, clique em Orientação:
Tutorial de ordenação
Neste tutorial, mostramos como ordenar itens em uma resposta de pesquisa. Quando um usuário final procura um produto no seu site, os resultados são ordenados por vários campos. Por exemplo, um usuário está procurando um vestido com o melhor preço e desconto. O preço e o desconto são vários campos aqui. O usuário vai ver os vestidos ordenados por preço e, para os vestidos com o mesmo preço, ordenados por desconto.
Para seguir as instruções da tarefa diretamente no editor do Cloud Shell, clique em Orientação:
Exemplo de conjunto de dados
Nesta página, usamos o conjunto de dados a seguir como exemplo. Somente os campos necessários para o exemplo são incluídos.
Filtro
Java
A sintaxe da expressão de filtro pode ser resumida pelo seguinte 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;
Os campos de texto compatíveis são resumidos na tabela a seguir.
field | descrição |
---|---|
"productId" | O ID do produto (o último segmento em Product.name). |
"brands" | Product.brands |
"categorias" | Product.categories |
"gêneros" | Audience.genders |
"ageGroups" | Audiences.age_groups |
"availability" | Product.availability O valor pode ser "IN_STOCK", "OUT_OF_STOCK", PREORDER", "BACKORDER". |
"colorFamilies" | ColorInfo.color_families |
"cores" | ColorInfo.colors |
"tamanhos" | Product.sizes |
"materiais" | Product.materials |
"padrões" | Product.patterns |
"condições" | Product.conditions |
"attributes.key" | O atributo personalizado textual no objeto "Produto". A chave pode ser qualquer chave no mapa Product.attributes se os valores do atributo forem textuais. |
"pickupInStore" | FulfillmentInfo.place_ids for type "pickup-in-store" |
"shipToStore" | FulfillmentInfo.place_ids for type "ship-to-store" |
"sameDayDelivery" | FulfillmentInfo.place_ids for type "same-day-delivery" |
"nextDayDelivery" | FulfillmentInfo.place_ids for type "next-day-delivery" |
"customFulfillment1" | FulfillmentInfo.place_ids for type "custom-type-1" |
"customFulfillment2" | FulfillmentInfo.place_ids for type "custom-type-2" |
"customFulfillment3" | FulfillmentInfo.place_ids for type "custom-type-3" |
"customFulfillment4" | FulfillmentInfo.place_ids for type "custom-type-4" |
"customFulfillment5" | FulfillmentInfo.place_ids for type "custom-type-5" |
"inventory(place_id,attributes.key)" | É o atributo de texto personalizado no Inventário. |
Os campos numéricos compatíveis estão resumidos na tabela a seguir.
field | descrição |
---|---|
"preço" | PriceInfo.price |
"desconto": | O desconto. Cálculo: (original_price - price) / original_price. |
"classificação" | Rating.average_rating |
"ratingCount" | Rating.rating_count |
"attributes.key" | O atributo personalizado numérico no objeto "Produto". A chave pode ser qualquer chave no mapa Product.attributes se os valores do atributo forem numéricos. |
"inventory(place_id,price)" | O preço do inventário. |
"inventory(place_id,original_price)" | O preço original do inventário. |
"inventory(place_id,attributes.key)" | O atributo personalizado numérico em Inventário. |
São permitidas no máximo 10 conjunções ou disjunções aninhadas.
Por exemplo, para pesquisar um produto do Google nas seguintes situações, defina query
como "Google" e filter
como os valores
mostrados na tabela a seguir:
scenario | filter |
---|---|
não é um acessório do Pixel | "NOT categories: ANY(\"Pixel > featured accessories\")" |
"mais barato que 100 dólares" | "price: IN(*, 100.0e)" |
"O alto-falante Nest não é mais barato que 80 dólares" | "(categories: ANY(\"Nest > speakers and displays\")) AND (price: IN(80.0i, *))" |
Pedido
Java
Os campos compatíveis estão resumidos na tabela a seguir.
field | descrição |
---|---|
"productId" | O ID do produto (o último segmento em Product.name). |
"título" | Product.title |
"brands" | Product.brands |
"categorias" | Product.categories |
"gêneros" | Audience.genders |
"ageGroups" | Audiences.age_groups |
"preço" | PriceInfo.price |
"desconto": | O desconto. Cálculo: (original_price - preço) / preço. |
"classificação" | Rating.average_rating |
"ratingCount" | Rating.rating_count |
"attributes.key" | O atributo personalizado no objeto "Produto". A chave pode ser qualquer chave no mapa Product.attributes. |
"inventory(place_id,price)" | O preço do inventário. |
"inventory(place_id,original_price)" | O preço original do inventário. |
"inventory(place_id,attributes.key)" | É o atributo numérico numérico ou textual no inventário. |
Por padrão, a ordem é crescente. A ordem decrescente pode ser especificada pelo sufixo "desc", como "rating desc".
Para um campo numérico com vários valores, por exemplo, um campo repetido ou um definido para variantes de produto, o valor mínimo é usado para classificar por ordem crescente, e o valor máximo é usado para classificar por ordem decrescente.
A ordenação por vários campos aceita o uso de campos separados por vírgulas em ordem de prioridade. Os campos de menor prioridade são usados para ordenar itens com valores iguais para campos de maior prioridade. Por exemplo, "rating desc, price" ordena itens com a mesma classificação por preço.