Filtrare i consigli

Se hai un'app per suggerimenti, puoi utilizzare i campi del documento per filtrare i risultati dei suggerimenti. Questa pagina spiega come utilizzare i campi del documento per filtrare un consiglio in base a un insieme specifico di documenti. Anche se gli esempi in questa pagina riguardano i consigli sui contenuti multimediali, i principi mostrati qui sono gli stessi per i consigli personalizzati. Per ulteriori informazioni sui suggerimenti per i contenuti multimediali, consulta Introduzione a Vertex AI Search per i contenuti multimediali.

Filtrare i suggerimenti e gli aggiornamenti del datastore

Dopo qualsiasi aggiornamento dell'datastore, dovrai attendere fino a 8 ore per il nuovo addestramento del modello. Questo perché il modello deve conoscere i valori attuali nei metadati del documento, nonché i campi configurati come filtrabili. Devi attendere la propagazione delle modifiche al documento e allo schema. Per i suggerimenti (a differenza della ricerca), il filtro non viene eseguito in tempo reale.

Filtri e impostazioni di diversificazione (solo consigli sui contenuti multimediali)

Oltre ai filtri, anche l'impostazione di diversificazione di un'app influisce sui risultati restituiti in una risposta di suggerimento di contenuti multimediali. Gli effetti dei filtri e della diversificazione vengono combinati. La diversificazione viene eseguita per prima e il filtraggio per secondo.

La combinazione di diversità elevata basata su regole e filtraggio degli attributi basato su categorie spesso genera un output vuoto. Questo perché l'elevata diversità limita l'app a restituire un risultato per ogni categoria.

Ad esempio, vuoi consigliare film basati su Toy Story. Hai impostato il livello di diversità basato su regole su Alto. Poiché il livello di diversità è elevato, anche se molti film potrebbero essere consigliati solo un film (ad esempio WALL·E) nella categoria dei film per bambini. Quando viene applicato il filtro per i film per bambini, viene restituito solo WALL·E come suggerimento.

Per informazioni generali sulla diversità, consulta la sezione Diversificare i suggerimenti per i contenuti multimediali.

Prima di iniziare

Assicurati di aver creato un'app di suggerimenti e un datastore. Per ulteriori informazioni, vedi Creare app multimediali o Creare un archivio dati di consigli personalizzati.

Documenti di esempio

Esamina questi documenti multimediali di esempio. Puoi fare riferimento a questi documenti di esempio mentre leggi questa pagina.

{"id":"1","schemaId":"default_schema","structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"88125","schemaId":"default_schema","structData":{"title":"Harry Potter and the Deathly Hallows: Part 2 (2011)","categories":["Action","Adventure","Drama","Fantasy","Mystery","IMAX"],"uri":"http://mytestdomain.movie/content/88125","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"2857","schemaId":"default_schema","structData":{"title":"Yellow Submarine (1968)","categories":["Adventure","Animation","Comedy","Fantasy","Musical"],"uri":"http://mytestdomain.movie/content/2857","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"60069","schemaId":"default_schema","structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}

Espressioni di filtro

Utilizza le espressioni di filtro per definire i filtri dei consigli.

Sintassi delle espressioni di filtro

Il seguente Extended Backus–Naur form riassume la sintassi dell'espressione di filtro che puoi utilizzare per definire i filtri dei consigli.

  # A single expression or multiple expressions that are joined by "AND" or "OR".
  filter = expression, { " AND " | "OR", expression };
  # An expression can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
    # A parenthesized expression
    | "(", expression, ")"
    # A simple expression applying to a textual field.
    # Function "ANY" returns true if the field contains any of the literals.
    textual_field, ":", "ANY", "(", literal, { ",", literal }, ")"
    # OR filter by "available"
    available, ":", "true",
  # A literal is any double-quoted string. You must escape backslash (\) and
  # quote (") characters.
  literal = double-quoted string;
  textual_field = see the tables below;

Limitazioni delle espressioni di filtro

Si applicano le seguenti limitazioni alle espressioni di filtro per i consigli:

  • La profondità degli operatori AND e OR tra parentesi è limitata. Le espressioni logiche nel filtro devono essere in forma normale congiuntiva (CNF). L'espressione logica supportata più complessa può essere un elenco di clausole connesse da AND che contengono solo operatori OR, ad esempio: (... OR ... OR ...) AND (... OR ...) AND (... OR ...)
  • Le espressioni possono essere negate con la parola chiave NOT o con -. Questa opzione funziona solo con le espressioni ANY() con un solo argomento.

  • Le limitazioni available devono essere di primo livello. Non possono essere utilizzati come parte di una clausola OR o di una negazione (NOT). Puoi utilizzare solo available: true. Se ometti questo filtro, i documenti scaduti e quelli non ancora disponibili potrebbero essere restituiti come consigli.

    Il campo available viene mappato alla seguente logica:

    datetime.now >= available_time AND datetime.now <= expire_time

    Se expire_time non è impostato, datetime.now <= expire_time viene risolto in true.

  • Il numero massimo di termini nella clausola AND di primo livello è 20.

  • Una clausola OR può avere fino a 100 argomenti inclusi nelle espressioni ANY(). Se una clausola OR ha più espressioni ANY(), tutti i relativi argomenti vengono conteggiati ai fini di questo limite. Ad esempio, categories: ANY("drama", "comedy") OR categories: ANY("adventure") ha tre argomenti.

Esempi di espressioni di filtro

La tabella seguente mostra esempi di espressioni di filtro valide e non valide. Inoltre, fornisce i motivi per cui gli esempi non validi non sono validi.

Espressione Valido Note
language_code: ANY("en", "fr")
NOT language_code: ANY("en")
NOT language_code: ANY("en", "fr") No Nega un ANY() con più di un argomento.
language_code: ANY("en", "fr") OR categories: ANY("drama")
(language_code: ANY("en") OR language_code: ANY("fr")) AND categories: ANY("drama")
(language_code: ANY("en") AND language_code: ANY("fr")) OR categories: ANY("drama") No Non in forma normale congiuntiva.
(language_code: ANY("en")) AND (available: true)
(language_code: ANY("en")) OR (available: true) No Combina available in un'espressione OR con altre condizioni.

La seguente espressione di filtro filtra i documenti che rientrano nella categoria drammatico o azione, che non sono in inglese e che sono disponibili:

categories: ANY("drama", "action") AND NOT language_code: ANY("en") AND available: true

Limiti di filtraggio

Ogni campo del documento filtrabile consuma una parte di memoria in ciascuno dei tuoi modelli. I seguenti limiti contribuiscono a prevenire effetti negativi sul rendimento della pubblicazione:

  • Nello schema è possibile impostare fino a 10 campi personalizzati come filtrabili.

    Se durante l'addestramento dell'app vengono trovati più di 10 campi personalizzati, ne vengono utilizzati solo 10.

  • Nello schema possono essere presenti fino a 100.000.000 valori di campi filtrabili.

    Puoi stimare il numero totale di valori dei campi filtrabili nello schema moltiplicando il numero di documenti nello schema per il numero di campi filtrabili. Se superi questi limiti, si verificano le seguenti situazioni:

    • Non puoi impostare campi aggiuntivi come filtrabili.
    • L'addestramento dell'app non riesce.

Filtrare i consigli

Per filtrare i consigli sui contenuti multimediali:

  1. Trova l'ID datastore. Se hai già l'ID del tuo datastore, vai al passaggio successivo.

    1. Nella console Google Cloud , vai alla pagina AI Applications e nel menu di navigazione, fai clic su Datastore.

      Vai alla pagina Datastore

    2. Fai clic sul nome del tuo datastore.

    3. Nella pagina Dati del datastore, recupera l'ID datastore.

  2. Determina il campo o i campi del documento in base ai quali vuoi filtrare. Ad esempio, per i documenti in Prima di iniziare, puoi utilizzare il campo categories come filtro.

  3. Per rendere filtrabile il campo categories:

    1. Nella Google Cloud console, vai alla pagina AI Applications.

      Applicazioni di AI

    2. Fai clic sull'app di consigli.

    3. Fai clic sulla scheda Schema. Questa scheda mostra le impostazioni correnti dei campi.

    4. Fai clic su Modifica.

    5. Se non è già selezionata, seleziona la casella di controllo Filtro nella riga categorie e poi fai clic su Salva.

    6. Attendi sei ore per consentire la propagazione della modifica dello schema. Dopo sei ore, puoi procedere al passaggio successivo.

  4. Per ottenere un suggerimento e filtrare in base al campo categories, esegui il seguente codice nella riga di comando:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d '{
         "userEvent": {
           "eventType": "EVENT_TYPE",
           "userPseudoId": "USER_PSEUDO_ID",
           "documents": {
             "id": "DOCUMENT_ID"
           }
         },
         "params": {
           "returnDocument": true,
           "attributeFilteringSyntax": true,
           "strictFiltering": true
         },
         "filter": "FILTER"
       }' \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/SERVING_CONFIG_ID:recommend"
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto.
    • DATA_STORE_ID: l'ID del tuo datastore.
    • DOCUMENT_ID: l'ID del documento per cui vuoi visualizzare l'anteprima dei suggerimenti. Utilizza l'ID che hai utilizzato per questo documento al momento dell'importazione dei dati.
    • EVENT_TYPE: il tipo di evento utente. Per i valori di eventType, consulta UserEvent.
    • USER_PSEUDO_ID: un identificatore pseudonimizzato dell'utente. Puoi utilizzare un cookie HTTP per questo campo, che identifica in modo univoco un visitatore su un singolo dispositivo. Non impostare questo campo sullo stesso identificatore per più utenti. In questo modo, le cronologie degli eventi verrebbero combinate e la qualità del modello peggiorerebbe. Non includere informazioni che consentono l'identificazione personale (PII) in questo campo.
    • SERVING_CONFIG_ID: l'ID della configurazione di pubblicazione. L'ID della configurazione di pubblicazione è uguale all'ID motore, quindi utilizza l'ID motore qui.
    • FILTER: un campo di testo che consente di filtrare un insieme specifico di campi utilizzando la sintassi dell'espressione di filtro. Il valore predefinito è una stringa vuota, il che significa che non viene applicato alcun filtro.

    Ad esempio, supponiamo che tu voglia un consiglio per un evento specifico di riproduzione di contenuti multimediali e che tu voglia filtrare i risultati del consiglio in modo che contengano solo documenti che: (1) appartengono alla categoria Bambini e (2) sono attualmente disponibili. Per farlo, includi le seguenti dichiarazioni nella chiamata:

    • "eventType": "media-play"
    • "filter": "categories: ANY(\"Children\") AND available: true"

    Per ulteriori informazioni, vedi il metodo recommend.

    Fai clic per visualizzare una risposta di esempio.

    Se effettui una richiesta di consiglio come quella precedente, puoi aspettarti di ricevere una risposta simile alla seguente. Tieni presente che la risposta include i due documenti con un valore categories di Children e un valore availability_start_time successivo alla data attuale.

    {
    "results": [
      {
        "id":"1",
        "schemaId":"default_schema",
        "structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1",
        "availability_start_time":"2023-01-01T00:00:00Z",
        "media_type":"movie"
        }
      },
      {
        "id":"60069",
        "schemaId":"default_schema",
        "structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069",
        "availability_start_time":"2023-01-01T00:00:00Z",
        "media_type":"movie"
        }
      }
    ],
    "attributionToken": "ChMzMDk3NTQ4MzQxOTcxOTE0ODM1GglhZi10ZXN0LTEiDmFmLXRlc3QtMTE0NTE0KAAwBg"
    }