Skip to content

$search.indexCsv

Alias $search.indexCSV

Description

Méthode permettant d'indexer le contenu d'un fichier CSV, où une version transformée de ce dernier.

Syntaxe

$search.indexCsv( indexLock , data , fieldOptions [ , options ] )

Paramètres

indexLock pojo
Lock de l'index à mettre à jour. Le lock peut être obtenu au moyen de la méthode $search.lockIndex.
data file / string
Objet file référençant le fichier CSV ou string contenant directement les données CSV.
fieldOptions array

Tableau décrivant les champs à créer dans l'index.

Par défaut, on s'attend à ce que le tableau décrive les colonnes du CSV. Si vous utilisez une fonction de transformation (voir option transform, le tableau doit décrire, dans l'ordre, les champs fournis par la fonction de callback (voir exemple ci-dessous).

Chaque entrée de la table doit être un map constitué des propriétés suivantes:

  • name (obligatoire) : Nom du champ
  • mode (optionnel) : Mode d'indexation; les modes reconnus sont:

    • token : tokenisation de la valeur
    • raw : pas de tokenisation (indexation de la valeur complète)
    • no : pas d'indexation de la valeur (elle est ignorée)
  • store (optionel) : Flag true/false ou valeurs yes/no indiquant si la valeur doit être stockée dans l'index. Voir ce que cela signifie dans la documentation de l'attribut indexstore de la descript

options map

Options supplémentaires. Les options reconnues sont:

format map / pojo
Format de CSV. Doit être un objet pojo construit au moyen de $csv.makeFormat ou un map qui reprend les mêmes règles que celles attendues par $csv.makeFormat
charset string
Charset des données du CSV. Si non spécifié, les données sont traitées selon le charset UTF-8.
onprogress function

Fonction de callback à invoquer pour donner à l'application un retour sur l'état d'avancement du traitement. La fonction de callback, si définie, est invoquée à intervalle régulier durant le traitement. L'utilisation est identique à l'option onprogress de la méthode $http.request. La fonction de callback peut interrompre le traitement en retournant la valeur false.

Un exemple est donné plus bas.

interval number
Intervalle en millisecondes entre deux appels de callback de la fonction onprogress. Si non défini, l'intervalle par défaut est de 1000 millisecondes (1 seconde).
transform function

Fonction de callback permettant de construire une nouvelle variante d'un record, de court-circuiter l'indexation d'un enregistrement ou d'interrompre une indexation.

L'idée première de la fonction est de transformer les valeurs brutes lues du CSV en une ou plusieurs valeurs à indexer. La fonction est invoquée pour chaque enregistrement du fichier d'entrée.

La fonction reçoit jusqu'à 2 paramètres:

  1. Un tableau (array) contenant les valeurs d'un enregistrement
  2. Un map qui reprend les options passées lors de l'appel à $search.lockIndex (voir paramètre indexLock plus haut).

Concrètement, la fonction reçoit en entrée un array contenant les valeurs d'un enregistrement. En sortie, on attend que la fonction fournisse un array contenant les valeurs à indexer. Le tableau en sortie doit correspondre au champs décrits dans le paramètre fieldOptions.

Si la fonction retourne la valeur null, l'enregistrement n'est pas indexé.

Si la fonction retourne la valeur false, le processus d'indexation est immédiatement stoppé.

Un exemple est donné plus bas.

Retour

Retourne true si l'indexation des données a réussi, sinon false.

Exemple

Exemple d'indexation d'un CSV suivi d'une recherche. L'exemple ci-dessous s'appuie sur le fichier "movies.csv" disponible en ligne à l'adresse suivante: https://gist.github.com/tiangechen/b68782efa49a16edaf07dc2cdaa855ea.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var lock = $search.lockIndex("movies");
try {
    $search.clear(lock);
    $search.indexCsv(
        lock,
        $file.load("C:/Temp/movies.csv"),
        [
            { name: "film" },
            { name: "genre" },
            { name: "leadStudio" },
            { name: "audienceScore" },
            { name: "profitability" },
            { name: "rottenTomatoes" },
            { name: "worldwideGross" },
            { name: "year" }
        ],
        {
            format: {
                delimiter: ",",
                recordSeparator: "\r\n",
                skipHeaderRecord: true
            }
        }
    );
}
finally {
    $search.unlockIndex(lock);
}

$logger.info(
    $search.search("movies", "year:2011")
);

L'exemple ci-dessous se charge d'indexer des adresses fournies par le registre fédéral des bâtiments et des logements. Ce dernier est fourni sous la forme d'un CSV disponible à l'adresse https://www.housing-stat.ch/fr/madd/public.html.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
var index = $search.lockIndex("regbl");
try {
    $search.clear(index);

    // Format du fichier ...
    //   Extension *.csv/*.dsv
    //   Séparateur: Tab ;
    //   Avec un en-tête (header) ;
    //   UTF-8 ;
    //   Pas de BOM (Indicateur d'ordre des octets)
    //   Pas de guillemets (pas de qualificatif de texte / d'inclusion);
    //   Il n'y a pas de caractères d'échappement ;
    //   Tous les champs de texte sont du type xs:token (Pas de Tab, NL ou LF);
    var options = $csv.makeFormat({
        format: "tdf",
        skipHeaderRecord: true
    });

    $search.indexCsv(
        index,
        $file.load("C:/Temp/ch/eingang_entree_entrata.csv"), 
        [
            { name: "address", mode: "token", store: "yes" }
        ],
        { 
            format: options,
            onprogress: function(event) {
                $logger.info("${event.loaded} records indexed");
            },
            transform: function(record, attributes) {
              if (record[3] != "") {
                return [ "${record[5]} ${record[3]}, ${record[10]} ${record[12]}" ];
              } else {
                return [ "${record[5]}, ${record[10]} ${record[12]}" ];
              }
            }
        } );
}
finally {
    $search.unlockIndex(index);
}

Dans cet exemple, on utilise une fonction de transformation pour construire une valeur à partir des données du CSV. Dans le fichier, un enregistrement est constitué des valeurs suivantes (dans l'ordre):

 0 : EGID
 1 : EDID
 2 : EGAID
 3 : DEINR
 4 : ESID
 5 : STRNAME
 6 : STRNAMK
 7 : STRINDX
 8 : STRSP
 9 : STROFFIZIEL
10 : DPLZ4
11 : DPLZZ
12 : DPLZNAME
13 : DKODE
14 : DKODN
15 : DOFFADR
16 : DEXPDA

On ne souhaite pas indexer les valeurs brutes du CSV, mais une chaîne de caractères basées sur ces valeurs. La valeur à indexer doit avoir le format suivant:

   "STRNAME DEINR, DPLZ4 DPLZNAME"
DEINR peut être vide.