0
votes

Comment rechercher une partie d'une chaîne avec une recherche cognitive Azure

Je suis assez nouveau à la recherche cognitive Azure et j'ai succédé à configurer mon index afin d'avoir une autoocom-complétion (à l'aide de la recherche partielle grâce à Cet article ).

Mais maintenant, j'ai un autre cas d'utilisation où j'ai de nombreux fichiers stockés dans un conteneur de blob Azure avec des métadonnées :

Un des métadonnées (de chaque fichier) est appelé Partnumbers et sa valeur est une chaîne de produits SKU séparés avec une virgule (comme "123456 78901 102938, 09876 "). J'ai construit mon index afin de stocker cette information sous forme de edm.string , comme vous pouvez le voir ci-dessous: xxx

maintenant je me débats trouver un moyen (via une syntaxe spécifique? Un analyseur? Un tokéniseur?) Pour pouvoir trouver tous les fichiers ayant un champ de métadonniers de métadonnées qui contient un seul SKU (afin que je puisse revenir tout Documents relatifs à un produit): J'aimerais passer le SKU "102938" à Azure Search et cela me rendrait tous les fichiers qui ont ce sku dans son champ Partnumbers Métadata (potentiellement entre autres SKU ).

Mais j'ai du mal à trouver des exemples sur Google et que la documentation semble - pour le moment - un peu de ma ligue (je ne suis pas vraiment sûr de comprendre correctement ce que les analyseurs, les jetons, etc. comment ils travaillent! C'est la première fois que je creuse dans la "recherche" World ...).

J'apprécierais vraiment que la communauté pourrait m'aider à cela, je tiens à lire Articles pour débutants à comprendre toushti NG, ou des tutoriels, ou tout ce qui pourrait m'aider à avancer avec cela!

Merci d'avance.


0 commentaires

3 Réponses :


1
votes

OK, je viens d'essayer quelque chose qui fonctionne: j'ai défini le PATTURE STORT> Analyseur sur mon champ PARTNUMBERS STRUT>, et lorsque j'ai testé avec le API d'analyseur , il a divisé mon SKUS en plusieurs jetons. Et après cela, je pouvais chercher un sku et cela m'a donné tous les fichiers que je voulais! Voici mon indice JSON Définition:

{
  "name": "my-index",
  "fields": [
    {
      "name": "partnumbers",
      "type": "Edm.String",
      "facetable": true,
      "filterable": true,
      "key": false,
      "retrievable": true,
      "searchable": true,
      "sortable": true,
      "analyzer": "pattern",
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "metadata_storage_name",
      "type": "Edm.String",
      "facetable": true,
      "filterable": true,
      "key": false,
      "retrievable": true,
      "searchable": true,
      "sortable": true,
      "analyzer": null,
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "metadata_storage_content_type",
      "type": "Edm.String",
      "facetable": true,
      "filterable": true,
      "key": false,
      "retrievable": true,
      "searchable": true,
      "sortable": true,
      "analyzer": null,
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "metadata_storage_last_modified",
      "type": "Edm.String",
      "facetable": true,
      "filterable": true,
      "key": false,
      "retrievable": true,
      "searchable": true,
      "sortable": true,
      "analyzer": null,
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "metadata_storage_path",
      "type": "Edm.String",
      "facetable": true,
      "filterable": true,
      "key": false,
      "retrievable": true,
      "searchable": true,
      "sortable": true,
      "analyzer": null,
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "metadata_storage_size",
      "type": "Edm.Int64",
      "facetable": true,
      "filterable": true,
      "retrievable": true,
      "sortable": true,
      "analyzer": null,
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "key",
      "type": "Edm.String",
      "facetable": true,
      "filterable": true,
      "key": true,
      "retrievable": true,
      "searchable": true,
      "sortable": true,
      "analyzer": null,
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "name",
      "type": "Edm.String",
      "facetable": true,
      "filterable": true,
      "key": false,
      "retrievable": true,
      "searchable": true,
      "sortable": true,
      "analyzer": null,
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "partialPartnumbers",
      "type": "Edm.String",
      "facetable": false,
      "filterable": false,
      "key": false,
      "retrievable": false,
      "searchable": true,
      "sortable": false,
      "analyzer": null,
      "indexAnalyzer": "prefixCmAnalyzer",
      "searchAnalyzer": "standardCmAnalyzer",
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "partialName",
      "type": "Edm.String",
      "facetable": false,
      "filterable": false,
      "key": false,
      "retrievable": false,
      "searchable": true,
      "sortable": false,
      "analyzer": null,
      "indexAnalyzer": "prefixCmAnalyzer",
      "searchAnalyzer": "standardCmAnalyzer",
      "synonymMaps": [],
      "fields": []
    }
  ],
  "suggesters": [
    {
      "name": "conformity-certificates-index_suggester",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": [
        "name"
      ]
    }
  ],
  "scoringProfiles": [
    {
      "name": "exactFirst",
      "functions": [],
      "functionAggregation": null,
      "text": {
        "weights": {
          "partnumbers": 4,
          "partialPartnumbers": 3,
          "name": 2,
          "partialName": 1
        }
      }
    }
  ],
  "defaultScoringProfile": "exactFirst",
  "corsOptions": null,
  "analyzers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
      "name": "standardCmAnalyzer",
      "tokenizer": "standard_v2",
      "tokenFilters": [
        "lowercase",
        "asciifolding"
      ],
      "charFilters": []
    },
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
      "name": "prefixCmAnalyzer",
      "tokenizer": "standard_v2",
      "tokenFilters": [
        "lowercase",
        "asciifolding",
        "edgeNGramCmTokenFilter"
      ],
      "charFilters": []
    }
  ],
  "charFilters": [],
  "tokenFilters": [
    {
      "@odata.type": "#Microsoft.Azure.Search.EdgeNGramTokenFilterV2",
      "name": "edgeNGramCmTokenFilter",
      "minGram": 2,
      "maxGram": 20,
      "side": "front"
    }
  ],
  "tokenizers": [],
  "@odata.etag": "\"0x8D818EC80CXXXX\""
}


0 commentaires

0
votes

Cela devrait être réalisable grâce à une recherche d'expression et de carte générique régulière

Ceci peut être appliqué à n'importe quel champ interrogeable ayant Lucene Analyseur de requête configuré sur l'index.

".... la langue complète de la requête Lucene, que vous obtenez en définissant la queyType = complet, étend la langue de requête simple par défaut en ajoutant de la prise en charge pour plus de types d'opérateurs et de requêtes telles que WILDCARD, FUZZY, REGEX et les requêtes sur le terrain. . Par exemple, une expression régulière envoyée dans une syntaxe de requête simple serait interprétée comme une chaîne de requête et non une expression. L'exemple de demande dans cet article utilise la langue complète de la requête Lucene. "

Nom de terrain: SearchExpression

E.g. SearchFields = Partnumbers & $ Select = Partnumbers & Search = Partnumbers: 102938 *

https://docs.microsoft.com/fr -US / Azure / Recherche / Query-Lucene-Syntaxe


0 commentaires

1
votes

Vous pouvez rechercher vos numéros de pièce avec un filtre régulier.

filtre $ = Search.in (Partnumbers, '102938', ',')

Vous trouverez plus d'exemples dans la documentation ici: https://docs.microsoft.com/en-us/azure/search/search-query-odata-filter

Ne pas utiliser de caractères génériques ou d'expressions régulières pour ce cas d'utilisation. Votre exemple a des particuliers avec une longueur variable. Donc, une recherche générale de 102938 * correspondrait non involontairement 1029381, 10293810, 102938123 et ainsi de suite.

Vos données déjà explicitement et précisément un ensemble de numéros de pièce. Vous pouvez interroger contre cette liste.


0 commentaires