Spotlight

fouffouf Membre
20:22 modifié dans API AppKit #1
Je n'ai rien compris a la doc d'Apple sur Spotlight : j'ecris une appli qui gere du texte et ca serait bien que mon appli soit optimisee pour les recherches dans Tiger avec Spotlight.
Je n'arrive meme pas a savoir s'il faut integrer les methodes d'indexation dans les routines d'enregistrement.  :why?:

Aidez-moi  :'(


(question subsidiaire : oxitan, yaura-t-il une partie du forum sur Dashboard quand Tiger sortira ?)

Réponses

  • muqaddarmuqaddar Administrateur
    20:22 modifié #2
    Heu, ouais je peux ajouter 2 forums :

    - dashboard, spotlight
    - optimisation 64 bits / Velocity Engine / multi-processeurs

    Je pense pas qu'il y ait bcp de programmeurs ici qui se servent du deuxième mais pourquoi pas...
  • AntilogAntilog Membre
    20:22 modifié #3
    Peut-être pas avant que Apple n'ait sorti Tiger?
    Sinon, problèmes judiciaires en perspective...

    (Violation de secret professionnel)
  • muqaddarmuqaddar Administrateur
    20:22 modifié #4
    Ouais tu as raison je pense... :(
  • laurrislaurris Membre
    janvier 2005 modifié #5
    Si tu souhaites utiliser spotlight, il faut que tu développe avec xcode 2.0 et donc avec tiger.
    Si c' est le cas, le mieux c' est de regarder dans MDImporter.
  • fouffouf Membre
    20:22 modifié #6
    Euuuh  B) fait juste attention, le lien dans le forum point vers un site de patch pour des jeux  :PÏ€

    Merci quand meme.
  • 20:22 modifié #7
    ---
  • laurrislaurris Membre
    20:22 modifié #8
    J' ai beau lire et relire la doc de Spotlight, je n' arrive toujours pas à  comprendre certains points.
    J' ai compris le principe général: un daemon qui utilise des plugins (metadata importers ) pour extraire les informations interressantes dans un fichier et les balancer dans une base facile à  consulter par la suite.
    Mais alors, que veut dire le terme metadata ? Est-ce que c' est un terme abstrait pour désigner "toute info succeptible d' être extraite d' un fichier" ou est-ce que ça désigne des bits du fichier qui contiennent des infos sous forme binaire ?
    Et est-ce que spotlight écrit quelque chose dans les fichiers qu' il traite ? (cf les considérations sur la sécurité dans la doc).

    Autre question sans réponse:
    - Avec les importers on peut extraire des infos pour un fichier entier (date, taille, etc ...).
    - On peut aussi faire une recherche plus fine à  l' intérieur d' un fichier, comme par exemple les contacts du carnet d' adresse. Spotlight va chercher des éléments à  l' interieur de la base d' adresses et permet d' ouvrir dans AdressBook l' adresse sélectionnée dans les résultats.
    Je me demande si on pourrait utiliser spotlight de cette façon pour faire des recherches directement dans une base SQL ou dans un fichier xml.
    Exemple: on tape un mot dans spotlight et on obtient les occurences dans un dictionnaire ou dans une base quelconque de son cru.
    Mais est-ce que c' est PREVU pour cet usage ou seulement pour les recherches simples dans le file system ? Je n' ai pas vu de réponse précise dans la doc Apple.

    Voilà  qu' est-ce qui "m' interpelle" , comme on dit.
  • cbrandtcbrandt Membre
    20:22 modifié #9
    voilà  ce que moi j'en ai compris (à  prendre avec des pincettes):

    dans 1110371813:

    Mais alors, que veut dire le terme metadata ? Est-ce que c' est un terme abstrait pour désigner "toute info succeptible d' être extraite d' un fichier" ou est-ce que ça désigne des bits du fichier qui contiennent des infos sous forme binaire ?

    ce sont des infos sur les infos (donc nom d'auteur, légende, album, etc.. pour des données audio ou photo par ex) ou les infos elles-même (cas d'un fichier pdf où tous les mots du fichiers vont finalement se retrouver dans la base spotlight)

    dans 1110371813:

    Et est-ce que spotlight écrit quelque chose dans les fichiers qu' il traite ?

    non...

    dans 1110371813:

    Je me demande si on pourrait utiliser spotlight de cette façon pour faire des recherches directement dans une base SQL ou dans un fichier xml.
    Exemple: on tape un mot dans spotlight et on obtient les occurences dans un dictionnaire ou dans une base quelconque de son cru.
    Mais est-ce que c' est PREVU pour cet usage ou seulement pour les recherches simples dans le file system ? Je n' ai pas vu de réponse précise dans la doc Apple.

    pour faire des recherches directement dans une base sql en utilisant spotlight reviendrai plus ou moins à  indexer(et donc à  copier dans la base spotlight) le contenu de toute la base à  chaque fois qu'elle est modifiée (en fait le fichier qui la contient.
    pour un fichier xml, le contenu du fichier va se retrouver en entier, indexé dans la base spotlight.

  • mpergandmpergand Membre
    20:22 modifié #10

    Et est-ce que spotlight écrit quelque chose dans les fichiers qu' il traite ?
    non...


    Apple a décidé de ne pas utiliser de metadatas spécifique à  un système de fichier. Les metadata de HFS ne sont conservés que pour la compatibilité avec OS 9 et il est déconseillé de les utiliser.
    Certaines appli Apple ne définissent même pas le "creator type"  ???

    Le but d'Apple est certainement, le moment venu, de pouvoir changer de système de fichier (et de se débarrasser de Mac OS Classic par la même occasion) en toute liberté ...
  • laurrislaurris Membre
    20:22 modifié #11
    Donc je retiens que rien n' est écrit dans les fichiers (j' avais un doute parce que dans la doc on suggère de prévoir pour les applications une possibilité de sauver les documents SANS métadata, ce qui suppose qu'elles peuvent en écrire éventuellement. Mais à  la réflexion ça ne change rien au fait que le spotlight engine lui même n' écrit rien lors de l' indexation. Ce sont les applications qui écrivent des métadata sur les fichiers, et pour leurs documents uniquement)

    dans 1110373795:

    pour faire des recherches directement dans une base sql en utilisant spotlight reviendrai plus ou moins à  indexer(et donc à  copier dans la base spotlight) le contenu de toute la base à  chaque fois qu'elle est modifiée (en fait le fichier qui la contient.
    pour un fichier xml, le contenu du fichier va se retrouver en entier, indexé dans la base spotlight.


    Dans l' absolu ça revient à  ça. Mais dans la pratique il faut voir comment ça peut se passer. quand on approfondit un peu la doc on voit que chaque importer (qui indexe les données) s' occupe de fichiers bien précis (Doc Type, extension ...). L' argument principal de la fonction qui indexe est un chemin de fichier. Dans le cas d' un fichier xml ça ne pose pas de problème majeur, mais dans le cas d' une base SQL ou autre (domaine que je ne maitrise pas), on ne peut pas donner en argument un serveur avec base et table.
    Il faudrait attaquer directement les fichiers et refaire toute l'indexation ... j' imagine mais je n' en sais pas plus ...

    Autre question que je lance telle une bouteille à  la mer et qui sera récupérée quand des gens auront commencé à  approfondir le Spotlight  SDK:
    Dans l' importer on spécifie les fichiers succeptibles d' être recherchés avec un Document type ou UTI (Universal Type Identifier) hérarchique du genre: com.data.Document.xml .
    Un fichier XML, par exemple, appartient au type Document qui appartient au type Data qui appartient au type Item.
    Le problème est que certains types sont réservés. Le "Document" est réservé par Apple pour les recherches dans spotlight effectuées avec le critère "document".
    Que se passe-t'il si on veut créer un meta data importer qui prenne en compte un Type qui hérite de Document ? Est-ce que les deux critères des deux importer sont pris en compte ?
    Est-ce qu'il y a un conflit avec l' importer Apple ? Qui gagne ? (ça je crois savoir)

    Voili voilou, de toute façon on y vera plus clair quand tout ça sera sorti et testé.
  • cbrandtcbrandt Membre
    20:22 modifié #12
    dans 1110380077:

    Que se passe-t'il si on veut créer un meta data importer qui prenne en compte un Type qui hérite de Document ? Est-ce que les deux critères des deux importer sont pris en compte ?
    Est-ce qu'il y a un conflit avec l' importer Apple ? Qui gagne ? (ça je crois savoir)


    lors du tiger developer briefing qui a eu lieu fin novembre dernier, on ne parlait pas encore de Universal Type Identifier. cepandant, il a été précisé que lorsque plusieurs importer acceptaient un même fichier, tous étaient appelés, ce qui est utile par ex. si apple fournissait mettons un importer de pdf qui se contente d'indexer le nom de l'auteur, la date de création, la taille du fichier, et qu'un importer de pdf fourni par adobe irait indexer jusqu'au contenu même du document.
  • laurrislaurris Membre
    mars 2005 modifié #13
    Merci cbrant, effectivement un même fichier peut-être pris en compte par plusieurs importers. J' avais abandonné l' affaire trop vite en constatant que mon fichier xml n' était pas indexé mais c' était du à  autre chose.
    Par contre, quand deux importers veulent attribuer deux valeurs différentes à  une clé qui n' en accèpte qu' une, ça coince obligatoirement.
    A l' usage (parce que rien dans la doc Apple), je dirais que la "priorité" dépend de la précision dans la concordance des UTI .Par exemple un importer qui déclare "public.xml" gagne sur un importer qui déclare "public.document" même si l' UTI "public.xml" hérite de l' UTI "public.document". On dirait aussi qu' en cas de conflit c' est le premier importer à  indexer qui gagne.
    Tout ça c' est au feeling et ça peut encore changer en théorie ...

    Sinon j' ai une grosse déception. Apparemment l' unité de base pour l' indexation est bien le fichier. J ai l' impression que l' on ne peut pas indexer des éléments qui se trouveraient à  l' intérieur d' un fichier. Je me demandais comment on pouvait rechercher des contacts d' AdressBook alors que la base d' adresses tient en un fichier dans Panther. En fait, dans Tiger,  chaque contact correspond à  un ficher. Pareil pour Mail qui traite désormais les messages comme des fichiers, même s' il garde aussi le format mbox.
    Finalement pour que Spotlight soit vraiment efficace il ne suffit  pas d' un importer adapté au format de document recherché, il faut AUSSI qu' à  chaque objet recherché corresponde 1 fichier.
  • laurrislaurris Membre
    avril 2005 modifié #14
    Je me pose une question à  propos de Spotlight et de son fonctionnement. Bon, j' ai un peu deux jours d' avance sur l' horaire mais j' espère qu' on ne m' en voudra pas.
    Je ne sais pas si vous avez remarqué, mais quand on recherche un terme dans la barre spotlight et qu' on choisit un PDF, Aperçu ouvre le fichier avec le terme recherché dans son propre textfield de recherche et se place à  la première occurence dans le texte.

    COMMENT CA MARCHE ?

    j' imagine que spotlight envoie à  Aperçu une instruction pour lui dire d' ouvrir tel fichier, avec un terme de recherche. Par quel moyen alors ? Apple Events, notification du Finder ?
    Je me dis que Spotlight doit passer le terme de recherche en argument lors de l'ouverture du fichier. Dans ce cas, n' importe quelle appli pourrait en tirer profit.

    Bien cherché dans la doc sur Spotlight, rien trouvé la dessus.

    En tout cas, si effectivement on peut passer la recherche en argument à  une appli, ça ouvre des perspectives. Par exemple, on pourrait imaginer une appli qui gère des données dans une base (SQlite par exemple). La base pourrait être exportée sous forme de fichiers où chaque fichier porte le nom d' une entrée. le fichier serait vide, ce qui limite beaucoup l' indexation dans la base spotlight.
    Ensuite, quand le fichier est ouvert à  travers spotlight, l' appli lance une recherche dans sa base avec le nom du fichier.
    Bien sûr, il y aurait des limitations: ça implique une base avec un mode d' interrogation unique. Ca produit aussi plein de petit fichiers sur le disque.
    Avantage:
    - indexation spotlight réduite (nom du fichier et quelques bricoles de base pour le Finder).
    - Indépendant du type de base puisqu' il suffit que l' appli cible puisse l' ouvrir et effectuer une recherche.

    Voilà , c' est juste une idée brute comme ça en passant, et si ça se trouve complètement incongrue ou irréalisable.
    De toute façon ma question, en dehors de ce projet (improbable ?), c' est cette histoire d' Aperçu qui recherche la requète de Spotlight car ça me trouble fort.
  • ObiObi Membre
    avril 2005 modifié #15
    dans 1114604335:

    Je ne sais pas si vous avez remarqué, mais quand on recherche un terme dans la barre spotlight et qu' on choisit un PDF, Aperçu ouvre le fichier avec le terme recherché dans son propre textfield de recherche et se place à  la première occurence dans le texte.


    Ca m'a sauté aux yeux aussi, quand j'ai regardé la vidéo !
    Je connais pas bien les mécanismes d'ouvertures de fichiers (à  part la méthode à  implementer dans son applis) mais en voyant cette fonctionnalité, j'ai tout de suite pensé à  des tas d'utilisations :o

    J'aimerais bien tester (et eventuellement integrer) spotlight, surtout si il existe des exemples compréhensibles.
  • laurrislaurris Membre
    20:22 modifié #16
    J' ai trouvé la réponse sur la liste Apple.
    Effectivement, dans Tiger les applications peuvent s' ouvrir avec la recherche de spotlight comme argument.
    Pour récupérer cet argument au moment de l' ouverture d' un fichier, il faut appeler le Event Manager:
    :<br />[code]<br />- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename<br />{<br />NSAppleEventManager *sam = [NSAppleEventManager sharedAppleEventManager];<br />NSAppleEventDescriptor *lastEvent = [sam currentAppleEvent];<br />NSString *searchString = [[lastEvent descriptorForKeyword:keyAESearchText] stringValue];<br />}<br />
    

Connectez-vous ou Inscrivez-vous pour répondre.