Ergebnisse filtern und sortieren

Auf dieser Seite werden die Filterung und Sortierung mit der Suche beschrieben.

Semantisches Filtern optimiert die Sortierung, die nicht der Standardeinstellung entspricht

Vertex AI Search for Commerce ist so konzipiert, dass eine Vielzahl von Ergebnissen angezeigt wird, darunter auch geringfügig relevante Artikel, die beliebt sind oder im Trend liegen. Das ist bei Standardsuchen (sortiert nach Relevanz) effektiv. Bei anderen Suchanfragen, bei denen die order_by-Funktion verwendet wird, z. B. „Nach Preis sortieren“, können weniger relevante Artikel aufgrund des niedrigeren Preises beispielsweise prominenter angezeigt werden.

Um diesen Effekt zu mildern, wurde in Vertex AI Search for Commerce eine semantische Filterung auf Grundlage von Einbettungen eingeführt, um diese weniger relevanten Elemente aus den nicht standardmäßigen Suchergebnissen zu entfernen und so die Nutzerfreundlichkeit zu verbessern.

Dieses beabsichtigte Verhalten kann jedoch dazu führen, dass insgesamt weniger Suchergebnisse angezeigt werden. Wenn Sie die Filterung deaktivieren, kann sich das auf die Qualität der Suchergebnisse auswirken. Wenn Sie sich Sorgen machen, dass weniger Suchergebnisse angezeigt werden, wenden Sie sich an den Support.

Anleitung zum Filtern

In dieser Anleitung wird die Filterfunktion veranschaulicht. Damit können Sie die Suchanfragen entsprechend Ihren eigenen Anforderungen oder den Anforderungen Ihrer Kunden anpassen. Sie können nach einzelnen oder mehreren Feldern filtern, nach Textfeldern oder numerischen Feldern oder beidem. Sie können eine Ausdruckssprache verwenden, um für jedes Feld ein Prädikat zu erstellen, oder verschiedene Ausdrücke mithilfe logischer Operatoren kombinieren. Ein Käufer, der nach Schuhen sucht, kann seine Suche beispielsweise nach seiner bevorzugten Marke und Farbe filtern.


Klicken Sie auf Anleitung, um eine detaillierte Anleitung für diese Aufgabe direkt im Cloud Shell-Editor zu erhalten:

Anleitung


Anleitung zum Sortieren

In dieser Anleitung erfahren Sie, wie Sie Elemente in einer Suchantwort sortieren. Wenn ein Endnutzer auf Ihrer Website nach einem Produkt sucht, werden ihm die Ergebnisse nach mehreren Feldern sortiert angezeigt. Ein Nutzer sucht beispielsweise nach einem Kleid mit dem besten Preis und Rabatt. „Preis“ und „Rabatt“ sind hier mehrere Felder. Der Nutzer sieht die Kleider nach Preis sortiert und bei Kleidern mit demselben Preis nach Rabatt.


Klicken Sie auf Anleitung, um eine detaillierte Anleitung für diese Aufgabe direkt im Cloud Shell-Editor zu erhalten:

Anleitung


Beispieldatensatz

Auf dieser Seite wird das folgende Dataset als Beispiel verwendet. Nur die für das Beispiel erforderlichen Felder sind enthalten.

Filter

Java

import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;

public static void searchFilteredProducts(String query, int pageSize,
    String filter) throws IOException, InterruptedException {
  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .setPageSize(pageSize)
      .setFilter(filter)
      .build();

  try (SearchServiceClient searchClient = SearchServiceClient.create()) {
    SearchResponse response = searchClient.search(searchRequest).getPage().getResponse();
    System.out.println("Search response: " + searchResponse);
  }
}

Die Filterausdruckssyntax kann mit dem folgenden EBNF zusammengefasst werden:

  # 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;

Die unterstützten Textfelder werden in der folgenden Tabelle zusammengefasst.

Feld Beschreibung
„productId“ Die Produkt-ID (das letzte Segment von Product.name).
"brands" Die Product.brands.
„categories“ Die Product.categories.
„genders“ Die Audience.genders.
„ageGroups“ Die Audience.age_groups.
"availability" Die Product.availability. Der Wert ist einer der folgenden Werte: „IN_STORES“, „OUT_OF_STORES“, „PREORDER“, „BACKORDER“.
"colorFamilies" Die ColorInfo.color_families.
„colors“ Die ColorInfo.colors.
„sizes“ Die Product.sizes.
„materials“ Die Product.materials.
„patterns“ Die Product.patterns.
„conditions“ Die Product.conditions.
"attributes.key" Das benutzerdefinierte Textattribut im Produktobjekt. Ein Schlüssel kann ein beliebiger Schlüssel in der Zuordnung Product.attributes sein, wenn die Attributwerte in Textform vorliegen.
„pickupInStore“ Die FulfillmentInfo.place_ids für Typ "pickup-in-store".
„shipToStore“ Die FulfillmentInfo.place_ids für Typ "ship-to-store".
„sameDayDelivery“ Die FulfillmentInfo.place_ids für Typ "same-day-delivery".
„nextDayDelivery“ Die FulfillmentInfo.place_ids für Typ "next-day-delivery".
„customFulfillment1“ Die FulfillmentInfo.place_ids für Typ "custom-type-1".
„customFulfillment2“ Die FulfillmentInfo.place_ids für Typ "custom-type-2".
„customFulfillment3“ Die FulfillmentInfo.place_ids für Typ "custom-type-3".
„customFulfillment4“ Die FulfillmentInfo.place_ids für Typ "custom-type-4".
„customFulfillment5“ Die FulfillmentInfo.place_ids für Typ "custom-type-5".
"inventory(place_id,attributes.key)" Das benutzerdefinierte Textattribut im Inventar.

Die unterstützten numerischen Felder sind in der folgenden Tabelle zusammengefasst.

Feld Beschreibung
„price“ Der PriceInfo.price.
„discount“ Der Rabatt. Berechnet von (original_price – Preis) / original_price.
„rating“ Die Rating.average_rating.
„ratingCount“ Die Rating.rating_count.
"attributes.key" Das numerische benutzerdefinierte Attribut im Produktobjekt. Ein Schlüssel kann ein beliebiger Schlüssel in der Zuordnung "Product.attributes" sein, wenn die Attributwerte numerisch sind.
"inventory(place_id,price)" Der Inventarpreis.
"inventory(place_id,original_price)" Der ursprüngliche Inventarpreis.
"inventory(place_id,attributes.key)" Das numerische benutzerdefinierte Attribut im Inventar.

Es sind maximal 10 verschachtelte Konjunktionen oder Disjunktionen zulässig.

Wenn Sie beispielsweise in den folgenden Situationen nach einem Google-Produkt suchen möchten, können Sie query als "Google" festlegen und filter als Werte in der folgenden Tabelle festlegen:

scenario Filter
kein Pixel-Zubehör "NOT categories: ANY(\"Pixel > featured accessories\")"
"Preis unter 100 $" "price: IN(*, 100.0e)"
"Nest Lautsprecher mit Preis ab 80 $" "(categories: ANY(\"Nest > speakers and displays\")) AND (price: IN(80.0i, *))"

Auftrag

Java

import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;

public static void searchOrderedProducts(String query, int pageSize,
    String orderBy) throws IOException, InterruptedException {
  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .setPageSize(pageSize)
      .setOrderBy(orderBy)
      .build();

  try (SearchServiceClient searchClient = SearchServiceClient.create()) {
    SearchResponse response = searchClient.search(searchRequest).getPage().getResponse();
    System.out.println("Search response: " + searchResponse);
  }
}

Die unterstützten sortierbaren Felder sind in der folgenden Tabelle zusammengefasst.

Feld Beschreibung
„productId“ Die Produkt-ID (das letzte Segment von Product.name).
„title“ Der Product.title.
"brands" Die Product.brands.
„categories“ Die Product.categories.
„genders“ Die Audience.genders.
„ageGroups“ Die Audience.age_groups.
„price“ Der PriceInfo.price.
„discount“ Der Rabatt. Berechnet von (original_price - Preis) / Preis.
„rating“ Die Rating.average_rating.
„ratingCount“ Die Rating.rating_count.
"attributes.key" Das benutzerdefinierte Attribut im Produktobjekt. Ein Schlüssel kann ein beliebiger Schlüssel in der Zuordnung "Product.attributes" sein.
"inventory(place_id,price)" Der Inventarpreis.
"inventory(place_id,original_price)" Der ursprüngliche Inventarpreis.
"inventory(place_id,attributes.key)" Das numerische oder benutzerdefinierte Textattribut im Inventar.

Die Reihenfolge ist standardmäßig aufsteigend. Die absteigende Reihenfolge kann durch das Suffix „desc“ angegeben werden, z. B. „rating desc“.

Bei einem numerischen Feld mit mehreren Werten, z. B. einem wiederholten Feld oder einem Feld, das für Variantenprodukte festgelegt ist, wird der Mindestwert für die Sortierung in aufsteigender Reihenfolge und der Höchstwert für die Sortierung in absteigender Reihenfolge verwendet.

Die Sortierung nach mehreren Feldern wird durch den Einsatz von durch Kommas getrennten Feldern in der Reihenfolge der Priorität unterstützt. Die Felder mit der niedrigeren Priorität werden verwendet, um Elemente mit identischen Werten für Felder mit höherer Priorität zu sortieren. Mit „rating desc, price“ werden beispielsweise Artikel mit derselben Bewertung nach Preis sortiert.