Filtrez la recherche générique pour n'afficher que les données structurées ou non structurées.

Si vous disposez d'une application de recherche qui utilise des données structurées ou des données non structurées avec des métadonnées, vous pouvez utiliser les métadonnées pour filtrer vos requêtes de recherche. Cette page explique comment utiliser les champs de métadonnées pour limiter votre recherche à un ensemble spécifique documents.

Avant de commencer

Assurez-vous d'avoir créé une application et ingéré des données structurées ou des données non structurées avec des métadonnées. Pour en savoir plus, consultez Créez une application de recherche.

Exemple de métadonnées

Consultez cet exemple de métadonnées pour quatre fichiers PDF (document_1.pdf, document_2.pdf, document_3.pdf et document_4.pdf). Ces métadonnées se trouver dans un fichier JSON dans un bucket Cloud Storage, avec les fichiers PDF. Vous pouvez vous reporter à cet exemple lorsque vous lisez cette page.

{"id": "1", "structData": {"title": "Policy on accepting corrected claims", "category": ["persona_A"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_1.pdf"}}
{"id": "2", "structData": {"title": "Claims documentation and reporting guidelines for commercial members", "category": ["persona_A", "persona_B"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_2.pdf"}}
{"id": "3", "structData": {"title": "Claims guidelines for bundled services and supplies for commercial members", "category": ["persona_B", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_3.pdf"}}
{"id": "4", "structData": {"title": "Advantage claims submission guidelines", "category": ["persona_A", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_4.pdf"}}

Syntaxe des expressions de filtre

Assurez-vous de bien comprendre la syntaxe de l'expression de filtre que vous utiliserez pour définir votre filtre de recherche. La syntaxe de l'expression de filtre peut être résumée par la forme Backus-Naur étendue suivante :

  # 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 exactly matches 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
    # An expression that applies to a geolocation field with text/street/postal address.
    |  geolocation_field, ":", "GEO_DISTANCE(", literal, ",", distance_in_meters, ")"
    # An expression that applies to a geolocation field with latitude and longitude.
    | geolocation_field, ":", "GEO_DISTANCE(", latitude_double, ",", longitude_double, ",", distance_in_meters, ")"
    # Datetime field
    | datetime_field, comparison, literal_iso_8601_datetime_format);
  # 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 = text field - for example, category;
  numerical_field = numerical field - for example, score;
  geolocation_field = field of geolocation data type - for example home_address, location;
  datetime_field = field of datetime data type - for example creation_date, expires_on;
  literal_iso_8601_datetime_format = either a double quoted string representing ISO 8601 datetime or a numerical field representing microseconds from unix epoch.

Rechercher à l'aide d'un filtre de métadonnées

Pour effectuer une recherche à l'aide d'un filtre de métadonnées, procédez comme suit:

  1. Déterminez le champ de métadonnées à utiliser pour filtrer vos requêtes de recherche. Pour Par exemple, pour les métadonnées de la section Avant de commencer, vous pouvez utiliser le champ category comme filtre de recherche. Vos utilisateurs pourraient filtrer persona_A, persona_B ou persona_C, pour que leur recherche soit limitée à les documents associés au personnage qui l’intéresse.

  2. Rendre le champ de métadonnées indexable :

    1. Dans la console Google Cloud, accédez à la page Agent Builder, puis dans le menu de navigation, cliquez sur Applications.

      Accéder à la page "Applications"

    2. Cliquez sur votre application de recherche.

    3. Dans le menu de navigation, cliquez sur Données.

    4. Cliquez sur l'onglet Schéma. Cet onglet affiche les paramètres actuels des champs.

    5. Cliquez sur Modifier.

    6. Cochez la case Indexable du champ que vous souhaitez rendre indexables.

    7. Cliquez sur Enregistrer. Pour en savoir plus, consultez la section Configurer les paramètres des champs.

  3. Recherchez l'ID de votre data store. Si vous disposez déjà de votre data store ID, passez à l'étape suivante.

    1. Dans la console Google Cloud, accédez à la page Agent Builder et cliquez sur Data Stores dans le menu de navigation.

      Accéder à la page "Datastores"

    2. Cliquez sur le nom de votre data store.

    3. Sur la page Données de votre data store, obtenez l'ID du data store.

  4. Obtenir les résultats de recherche

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search:search" \
    -d '{
    "query": "QUERY",
    "filter": "FILTER"
    }'
    
    • PROJECT_ID : ID de votre projet.
    • DATA_STORE_ID : ID de votre datastore.
    • QUERY: texte de la requête à rechercher.
    • FILTER : facultatif. Champ de texte qui vous permet de filtrer sur un ensemble de champs spécifié à l'aide de la syntaxe d'expression de filtre. La valeur par défaut est une chaîne vide, ce qui signifie qu'aucun filtre n'est appliqué.

    Par exemple, supposons que vous ayez importé les quatre fichiers PDF avec des métadonnées de la section Avant de commencer. Vous souhaitez rechercher des documents contiennent le mot "claims" (revendications) et n'interrogent que les documents dont la valeur category est persona_A Pour ce faire, vous devez inclure les déclarations suivantes dans votre appel:

    "query": "claims",
    "filter": "category: ANY(\"persona_A\")"
    

    Pour en savoir plus, consultez l'onglet REST sur Obtenez des résultats de recherche pour une application contenant des données structurées ou non structurées.

    Cliquez pour voir un exemple de réponse.

    Si vous effectuez une recherche comme celle de la procédure précédente, vous devriez obtenir une réponse semblable à la suivante. Notez que la réponse inclut les trois documents associés à un category la valeur de persona_A.

    {
    "results": [
    {
      "id": "2",
      "document": {
        "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/2",
        "id": "2",
        "structData": {
          "title": "Claims documentation and reporting guidelines for commercial members",
          "category": [
            "persona_A",
            "persona_B"
          ]
        },
        "derivedStructData": {
          "link": "gs://bucketname_87654321/data/document_2.pdf",
          "extractive_answers": [
            {
              "pageNumber": "1",
              "content": "lorem ipsum"
            }
          ]
        }
      }
    },
    {
      "id": "1",
      "document": {
        "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/1",
        "id": "1",
        "structData": {
          "title": "Policy on accepting corrected claims",
          "category": [
            "persona_A"
          ]
        },
        "derivedStructData": {
          "extractive_answers": [
            {
              "pageNumber": "2",
              "content": "lorem ipsum"
            }
          ],
          "link": "gs://bucketname_87654321/data/document_1.pdf"
        }
      }
    },
    {
      "id": "4",
      "document": {
        "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/4",
        "id": "4",
        "structData": {
          "title": "Advantage claims submission guidelines",
          "category": [
            "persona_A",
            "persona_C"
          ]
        },
        "derivedStructData": {
          "extractive_answers": [
            {
              "pageNumber": "47",
              "content": "lorem ipsum"
            }
          ],
          "link": "gs://bucketname_87654321/data/document_4.pdf"
        }
      }
    }
    ],
    "totalSize": 330,
    "attributionToken": "UvBRCgsI26PxpQYQs7vQZRIkNjRiYWY1MTItMDAwMC0yZWIwLTg3MTAtMTQyMjNiYzYzMWEyIgdHRU5FUklDKhSOvp0VpovvF8XL8xfC8J4V1LKdFQ",
    "guidedSearchResult": {},
    "summary": {}
    }
    

Exemples d'expressions de filtre

Le tableau suivant fournit des exemples d'expressions de filtre.

Filter Ne renvoie des résultats que pour les documents où :
category: ANY(\"persona_A\") le champ de texte category est persona_A
score: IN(*, 100.0e) le champ numérique score est supérieur à l'infini négatif et inférieur à 100,0
non-smoking = \"true\" la valeur booléenne non-smoking est "true"
pet-friendly = \"false\" La valeur booléenne pet-friendly est "false"
manufactured_date = \"2023\" le manufactured date a lieu en 2023
manufactured_date >= \"2024-04-16\" la valeur du champ manufactured_date correspond ou est ultérieure au 16 avril 2024
manufactured_date < \"2024-04-16T12:00:00-07:00\" l'manufactured_date est avant midi, heure avancée du Pacifique, le 16 avril 2024 ;
office.location:GEO_DISTANCE(\"1600 Amphitheater Pkwy, Mountain View, CA, 94043\", 500) Le champ de géolocalisation office.location se trouve à moins de 500 m de 1600 Amphitheatre Parkway.
NOT office.location:GEO_DISTANCE(\"Palo Alto, CA\", 1000) Le champ de géolocalisation office.location ne se trouve pas dans un rayon de 1 km de Palo Alto, en Californie.
office.location:GEO_DISTANCE(34.1829, -121.293, 500) le champ de géolocalisation office.location se trouve dans un rayon de 500 m de la latitude 34,1829 et de la longitude -121,293
category: ANY(\"persona_A\") AND score: IN(*, 100.0e) category est persona_A et score est inférieur à 100
office.location:GEO_DISTANCE(\"Mountain View, CA\", 500) OR office.location:GEO_DISTANCE(\"Palo Alto, CA\", 500) office.location se trouve à moins de 500 mètres de Mountain View ou de Palo Alto.
(price<175 AND pet-friendly = \"true\") OR (price<125 AND pet-friendly = \"false\") price est inférieur à 175 ans et je peux amener mon animal de compagnie, ou price est inférieur à 125 ans et je ne peux pas amener mon animal

Étape suivante

  • Pour comprendre l'impact des filtres sur la qualité de la recherche, évaluer la qualité de la recherche. Pour en savoir plus, consultez la section Évaluer la qualité de la recherche.