Moteur de recherche. Comparaison des moteurs de recherche en texte intégral. Pour ceux qui sont dans le tank

Sur des milliers de sites FTP anonymes. Dans cette variété, il était assez difficile pour les utilisateurs de trouver un programme adapté à leur problème.

De plus, ils ne savaient pas à l’avance si l’outil qu’ils recherchaient existait. Par conséquent, nous avons dû visualiser manuellement les stockages FTP, dont la structure était très différente. C'est ce problème qui a conduit à l'émergence de l'un des aspects clés monde moderne- Recherche sur Internet.

Histoire de la création

On pense que le créateur du premier moteur de recherche était Alan Emtage. En 1989, il a travaillé à l'Université McGill à Montréal, d'où il a quitté sa Barbade natale. Une de ses tâches en tant qu'administrateur de faculté universitaire informatique cherchait des programmes pour les étudiants et les enseignants. Pour faciliter son travail et gagner du temps, Alan a écrit du code qui effectuait sa recherche.

"Au lieu de perdre mon temps à parcourir les sites FTP et à essayer de comprendre ce qu'ils contenaient, j'ai écrit des scripts qui le faisaient pour moi", explique Alan, "et je l'ai fait rapidement".

<поле>:<необязательный пробел><значение><необязательный пробел>
Enregistrer<поле>pourrait prendre deux valeurs : User-agent ou Disallow. L'agent utilisateur a spécifié le nom du robot pour lequel la politique a été décrite et Disallow a déterminé les sections auxquelles l'accès a été refusé.

Par exemple, un fichier contenant de telles informations refuse à tous les robots l'accès aux URL contenant /cyberworld/map/ ou /tmp/ ou /foo.html :

# robots.txt pour http://www.example.com/ User-agent : * Disallow : /cyberworld/map/ # Ceci est un espace d'URL virtuel infini Disallow : /tmp/ # ceux-ci disparaîtront bientôt Disallow : /foo. HTML
Cet exemple bloque l'accès à /cyberworld/map pour tous les robots sauf cybermapper :

# robots.txt pour http://www.example.com/ User-agent : * Interdire : /cyberworld/map/ # Il s'agit d'un espace URL virtuel infini # Cybermapper sait où aller. Agent utilisateur : cybermapper Interdire :
Ce fichier va « déployer » tous les robots qui tentent d’accéder aux informations sur le site :

# s'en aller Agent utilisateur : * Interdire : /

Archie immortel

Créé il y a près de trois décennies, Archie n'a reçu aucune mise à jour pendant tout ce temps. Et cela offrait une expérience Internet complètement différente. Mais même aujourd’hui, vous pouvez l’utiliser pour trouver les informations dont vous avez besoin. L'un des endroits qui héberge encore le moteur de recherche Archie est l'Université de Varsovie. Est-ce vrai la plupart Les fichiers retrouvés par le service remontent à 2001.


Malgré le fait qu'Archie soit un moteur de recherche, il propose tout de même plusieurs fonctionnalités pour personnaliser votre recherche. En plus de la possibilité de spécifier une base de données (FTP anonyme ou index web polonais), le système offre un choix d'options pour interpréter la chaîne saisie : comme sous-chaîne, comme recherche textuelle ou comme expression régulière. Vous avez même accès à des fonctions de sélection d'un registre et à trois options pour modifier les options d'affichage des résultats : mots-clés, description ou liens.


Il existe également plusieurs paramètres de recherche facultatifs qui vous permettent de déterminer plus précisément fichiers nécessaires. Il est possible d'ajouter des mots de service OU et ET, de limiter la zone de recherche de fichiers à un certain chemin ou domaine (.com, .edu, .org, etc.), ainsi que de spécifier nombre maximum résultats de sortie.

Bien qu'Archie soit un moteur de recherche très ancien, il offre toujours des fonctionnalités de recherche assez puissantes. le fichier souhaité. Cependant, comparé aux moteurs de recherche modernes, il est extrêmement primitif. Les "moteurs de recherche" sont allés très loin - il vous suffit de commencer à saisir la requête souhaitée et le système propose déjà des options de recherche. Sans parler des algorithmes de machine learning utilisés.

Aujourd'hui apprentissage automatique représente l'une des parties principales moteurs de recherche comme Google ou Yandex. Un exemple d’utilisation de cette technologie pourrait être le classement de recherche : classement contextuel, classement personnalisé, etc. Dans ce cas, les systèmes Learning to Rank (LTR) sont très souvent utilisés.

Le machine learning permet également de « comprendre » les requêtes saisies par l’utilisateur. Le site corrige indépendamment l'orthographe, traite les synonymes, résout les problèmes d'ambiguïté (ce que l'utilisateur souhaitait trouver, des informations sur le groupe Eagles ou sur les aigles). Les moteurs de recherche apprennent indépendamment à classer les sites par URL - blog, ressource d'actualités, forum, etc., ainsi que les utilisateurs eux-mêmes pour créer une recherche personnalisée.

L'arrière-arrière-grand-père des moteurs de recherche

Archie a donné naissance à des moteurs de recherche tels que Google, il peut donc, dans une certaine mesure, être considéré comme l'arrière-arrière-grand-père des moteurs de recherche. C'était il y a presque trente ans. Aujourd'hui, l'industrie des moteurs de recherche gagne environ 780 milliards de dollars par an.

Quant à Alan Amtage, interrogé sur l'occasion manquée de devenir riche, il répond avec une certaine modestie. "Bien sûr, j'aimerais devenir riche", dit-il. - Cependant, même avec des brevets délivrés, je ne deviendrai peut-être pas milliardaire. Il est trop facile de faire des inexactitudes dans les descriptions. Parfois, ce n’est pas celui qui a été le premier qui gagne, mais celui qui devient le meilleur.

Google et d'autres sociétés n'ont pas été les premières, mais elles ont surpassé leurs concurrents, créant ainsi une industrie multimilliardaire.

Lorsqu'un travailleur de Netpikov est confronté à une tâche qui demande du temps (par exemple, créer un projet Death Star ou construire un appareil compact à fusion froide), il réfléchit tout d'abord à la manière d'automatiser ce travail. Nous collectons les résultats de ces réflexions sur une page spéciale de notre site Internet. Aujourd'hui, nous allons parler de la façon dont un nouveau service utile est né au sein de l'agence Netpeak.

Il y a bien longtemps, dans une galaxie très très lointaine, nous avons décidé de changer le moteur de recherche du site d'un client pour augmenter la visibilité des pages en recherche organique.

Tâche

Le moteur de recherche du projet client avec lequel nous avons dû travailler a été créé page séparée pour chaque demande. Étant donné que les requêtes contiennent parfois des fautes de frappe, toute une montagne de pages de ce type s'est accumulée, à la fois correctes et contenant des erreurs. En général - plus de deux millions de pages : également en russe et langue anglaise. Les pages contenant des erreurs étaient indexées et obstruaient les résultats.

Notre tâche était de nous assurer que toutes les options de requête - à la fois correctes et contenant des erreurs - conduisaient à une seule page. Par exemple, pour chacune des requêtes baseball, basaball, baaeball, baseball il y avait ses propres pages, mais il fallait s'assurer que toutes les options convergeaient sur une seule page avec demande correcte- le base-ball. Dans ce cas, la page correspondra à la forme correcte de la demande et nous pourrons nous débarrasser des déchets dans les résultats de recherche.

Exemples de groupes :

Il convient de noter que l’on ne fait pas toujours confiance aux agences pour mettre en œuvre des modifications dans le moteur du site Web. Nous sommes donc reconnaissants envers notre client pour l’opportunité de mettre en œuvre ce projet.

Cible

Créez un mécanisme de travail clair pour placer des redirections des pages contenant des phrases contenant des erreurs vers une page du site client contenant la phrase correcte.

Ceci est nécessaire à la fois pour améliorer l’exploration et l’indexation pages de destination moteur de recherche et pour la construction noyau sémantique et utilisez-le dans le développement nouvelle structure site. Bien sûr, nous ne connaissions pas le nombre total de langues dans lesquelles les requêtes étaient saisies, mais la majeure partie des phrases étaient en russe et en anglais, nous nous sommes donc concentrés sur ces langues.

Comment est née une nouvelle méthode

La solution la plus simple qui nous vient immédiatement à l’esprit consiste à interroger Google, qui la corrigera honnêtement pour nous. Mais organiser une telle pénétration est une entreprise assez coûteuse. C’est pourquoi mes camarades et moi avons emprunté un chemin différent. Notre mathématicien analytique a décidé d'utiliser une approche linguistique (à l'improviste !) et de construire un modèle de langage.

Qu'est-ce que ça veut dire? Nous déterminons la probabilité de rencontrer un mot dans la langue et pour chaque mot nous trouvons les probabilités de lui permettre de contenir diverses erreurs. Tout irait bien, et la théorie ici est belle, mais pour collecter de telles statistiques, vous devez disposer d'un énorme corpus de texte balisé pour chaque langue (encore une fois, les moteurs de recherche s'en rapprochent le plus). Naturellement, des questions se sont posées sur la manière de procéder et sur qui mettra tout cela en œuvre dans le code. Personne n'avait fait quelque chose de tel auparavant (si vous connaissez un cas, postez le lien dans les commentaires), la méthodologie a donc été développée à partir de zéro. Il y avait plusieurs idées et il n’était pas évident à l’avance laquelle était la meilleure. Par conséquent, nous nous attendions à ce que le développement soit effectué de manière cyclique : préparer une idée, la mettre en œuvre, tester, évaluer la qualité, puis décider de continuer à affiner l'idée ou non.

La mise en œuvre de la technologie peut être divisée en trois étapes. En savoir plus sur chacun d’eux.

Étape n°1. Formation du problème. Premier râteau

Attention! Après cette ligne, il y aura de nombreux termes que nous avons essayé d'expliquer dans un langage aussi simple que possible.

Étant donné que des informations supplémentaires (dictionnaires, fréquences, journaux) ne sont pas disponibles, des tentatives ont été faites pour résoudre le problème avec les ressources dont nous disposions. Nous avons essayé différentes méthodes regroupement. L’idée principale est que les mots d’un même groupe ne doivent pas trop différer.

Regroupement- une procédure qui collecte des données contenant des informations sur un échantillon d'objets, puis organise les objets en groupes relativement homogènes.

Distance de Levenshtein montre quoi quantité minimale des modifications (supprimer, insérer et remplacer) dans la ligne A doivent être apportées pour obtenir la ligne B.

  • Remplacement de symbole : sh[e]res — sh[i]res, sh[o]res ;
  • Insérer un symbole : sheres - s[p]heres;
  • Suppression : gol[d][f] - golf, or.

Dans chacun des exemples, la distance entre le mot mal orthographié et la forme correcte est de 1 correction.

Coefficient de Jaccard sur les bi- et trigrammes aide à savoir combien combinaisons courantes Les vers A et B comportent des syllabes à deux ou trois caractères.

Exemple : Considérons les lignes A = snowboard et B = border. Formule générale Le coefficient pour les bigrammes a la forme :

J = (nombre de bigrammes identiques pour A et B) / (nombre total de bigrammes dans A et B)

Découpons les lignes en bigrammes :

bigrammes pour A = ( sn, no, ow, wb, bo+, oa, ar, rd+ ) - 8 pièces ; bigrammes pour B = ( bo+, ou, rd+, de, er ) - 5 pièces ; Il existe deux bigrammes identiques marqués de signes plus - bo et rd.

Pour les trigrammes, ce sera similaire, sauf qu'au lieu de deux lettres, trois seront utilisées. Le coefficient Jaccard pour eux sera comme ceci :

Exemple de mots plus similaires :

A = baseball et B = baaeball ( ba+, as, se, eb+, ba+, al+, ll+ ) ( ba+, aa, ae, eb+, ba+, al+, ll+ ) J = 5 / (7 + 7 - 5) = 0,56

Bien que le coefficient de Jaccard fonctionne plus rapidement, il ne prend pas en compte l'ordre des syllabes dans un mot. Par conséquent, elle a été principalement utilisée à des fins de comparaison avec la distance de Levenshtein. En théorie, tout était simple ici. Les techniques de clustering pour les petites données sont assez faciles à résoudre, mais en pratique, il s'est avéré que pour compléter la décomposition, soit d'énormes puissance de calcul, ou des années (et idéalement, les deux). En deux semaines de travail, un script a été écrit en Python. Une fois lancé, il lit les phrases d'un fichier et affiche les listes de groupes vers un autre fichier. En même temps, comme tout programme, ce script chargeait le processeur et utilisait la RAM.

La plupart des méthodes testées nécessitaient des téraoctets de mémoire et des semaines de temps CPU. Nous avons adapté les méthodes pour que le programme ait besoin de 2 Go de mémoire et d'un cœur. Cependant, un million de demandes ont été traitées en 4 à 5 jours environ. Le temps d’exécution des tâches laissait donc encore beaucoup à désirer. Le résultat de l'algorithme peut être présenté sous forme de graphique à l'aide d'un petit exemple :

Lorsqu'il est appliqué à un projet client, cela signifie que les pages correspondant aux demandes dans le même cluster seront collées ensemble avec une redirection 301. Rappelons que notre objectif était de créer un mécanisme de travail clair pour placer des redirections des pages de phrases contenant des erreurs vers une page du site client avec la phrase correcte. Mais même avec cet exemple, les lacunes sont évidentes :

  1. On ne sait pas comment trouver des groupes formes correctes et s'ils sont là du tout.
  2. On ne sait pas quels seuils d’erreur utiliser. S'il y a un seuil grand (plus de 3 erreurs), alors les groupes seront très grands et jonchés ; s'il est trop petit, alors chaque mot formera son propre groupe, ce qui ne nous convenait pas non plus ; Il est impossible de trouver une signification universelle acceptable pour tous les groupes.
  3. On ne sait pas quoi faire avec des mots qui peuvent être classés simultanément en plusieurs groupes.

Étape n°2. Simplification. Nouvel espoir

Nous avons repensé l'algorithme, le rapprochant des correcteurs de grammaire mécaniques traditionnels. Heureusement, il y en a suffisamment. La bibliothèque Python Enchant a été choisie comme base. Cette bibliothèque contient des dictionnaires pour presque toutes les langues du monde, elle est assez simple à utiliser et vous pouvez obtenir des conseils sur ce qui doit être corrigé. Au cours de l'étape précédente, nous avons beaucoup appris sur les types de requêtes et sur les langues dans lesquelles ces requêtes peuvent être.

Depuis accès libre Les dictionnaires suivants ont été collectés :

  • anglais (Royaume-Uni);
  • Anglais (États-Unis) ;
  • Allemand;
  • Français;
  • Italien;
  • Espagnol;
  • Russe;
  • Ukrainien.
  1. S'il est correct (situé dans l'un des dictionnaires), nous le laissons tel quel ;
  2. Si c'est incorrect, nous obtenons une liste d'indices et prenons le premier qui nous tombe dessus ;
  3. Nous regroupons tous les mots en une phrase. Si nous n’avons jamais rencontré une telle phrase auparavant, nous créons un groupe pour celle-ci. La forme corrigée de la phrase devient son « centre ». Si c'est le cas, cela signifie que cette phrase a déjà son propre groupe, et nous y ajoutons une nouvelle forme erronée.

En conséquence, nous avons reçu le centre du groupe et une liste de mots de ce groupe. Ici, bien sûr, tout va mieux que la première fois, mais il y avait menace cachée. En raison des spécificités du projet, les requêtes contiennent de nombreux noms propres. Il existe des noms et prénoms de personnes, de villes, d’organisations, de zones géographiques et même des noms latins de dinosaures. En plus de cela, nous avons trouvé des mots avec une translittération incorrecte. Nous avons donc continué à chercher des moyens de résoudre le problème.

Étape n°3. Suppléments et Le Réveil de la Force

Le problème de la translittération a été résolu de manière assez simple et traditionnelle. Dans un premier temps, nous avons réalisé un dictionnaire de correspondance entre les lettres cyrilliques et latines.

Conformément à cela, chaque lettre des mots vérifiés a été transformée et il a été noté s'il y avait une correction du dictionnaire pour le mot résultant. Si l’option de translittération comportait le moins d’erreurs, nous l’avons sélectionnée comme correcte. Mais les noms propres sont un peu difficiles à résoudre. Le plus option simple le réapprovisionnement des dictionnaires s'est avéré être une collection de mots provenant des décharges de Wikipédia. Cependant, Wiki a aussi son propre points faibles. Il y a beaucoup de mots mal orthographiés et la méthode pour les filtrer n’est pas encore idéale. Nous avons compilé une base de données de mots commençant par lettres majuscules, et sans ponctuation devant eux. Ces mots sont devenus nos candidats pour les noms propres. Par exemple, après avoir traité un tel texte, les mots soulignés ont été ajoutés au dictionnaire :

Lors de la mise en œuvre de l'algorithme, il s'est avéré que la recherche d'indices dans le dictionnaire augmenté d'Enchant nécessitait parfois plus de 3 secondes par mot. Pour accélérer ce processus, l'une des implémentations de l'automate de Levenshtein a été utilisée.

Bref, l'idée de la machine est que l'on construise un schéma de transition en utilisant le dictionnaire existant. En même temps, nous savons à l'avance combien de corrections de mots nous seront acceptables. Chaque transition signifie que nous effectuons une sorte de transformation sur les lettres du mot - nous quittons la lettre ou appliquons l'un des types de correction - suppression, remplacement ou insertion. Et chaque sommet est l'une des options permettant de changer le mot.

Disons maintenant que nous avons un mot que nous voulons vérifier. S’il y a une erreur, il faut trouver toutes les formes de correction qui nous conviennent. Constamment, nous commençons à nous déplacer selon le schéma, en parcourant les lettres du mot vérifié. Lorsque les lettres seront épuisées, nous nous retrouverons à un ou plusieurs sommets, et ils nous montreront les options pour les mots corrects.

L'image montre une machine pour le mot nourriture avec les deux erreurs possibles. La flèche vers le haut signifie insérer un caractère à la position actuelle. Une flèche en diagonale avec un astérisque signifie un remplacement, une flèche avec un epsilon signifie une suppression et une flèche horizontale signifie que la lettre reste inchangée. Ayons le mot fxood. Cela correspondra au chemin dans la machine 00-10-11-21-31-41 - ce qui équivaut à insérer la lettre x après f dans le mot nourriture.

De plus, nous avons mené travail supplémentaire pour élargir les dictionnaires de base collectés, filtrer à l'avance les expressions non-dictionnaires (noms des modèles de produits et différents identifiants)V mode automatique, introduit la translittération et la recherche dans un dictionnaire supplémentaire.

Quel est le résultat ?

Nous travaillons toujours à la mise à niveau de l'algorithme, mais déjà à à ce stade développement, nous avons un outil qui peut nettoyer les déchets, comme les nuages ​​de tags, et fusionner les redirections 301 pages inutiles. Un tel outil sera particulièrement efficace pour un petit nombre de mots mal orthographiés, mais il donne également des résultats tout à fait satisfaisants sur de grands tableaux. Une version intermédiaire du script a été envoyée au client pour former un bloc de liaison. A partir de ce bloc, il sera possible de collecter Informations Complémentaires sur les corrections de requêtes. Nous n'avons pas envoyé les résultats complets du script pour implémentation, car nous travaillons toujours à améliorer la qualité du script.

La création du code et son test ont nécessité au total 40 heures de travail de la part d'un mathématicien-analyste. Conclusion : si vous devez un jour traiter environ deux millions de demandes, ne désespérez pas. Ces tâches peuvent être automatisées. Il est clair qu’il sera très difficile d’atteindre une précision de 100 %, mais il est possible de traiter correctement au moins 95 % des informations.

Bonjour hub.
Il y a quelques mois, j'ai reçu une commande pour développer un site Web. Le site était une collection d'articles ajoutés par l'utilisateur. L'un des points termes de référenceétait la création d’une recherche. Parce que Je suis un grand fan de réinventer les roues, il a été décidé de ne pas utiliser la recherche de Yandex ou de Google.

Recherche régulière

La solution la plus triviale consistait à diviser les articles en mots, à diviser la requête en mots et à rechercher des correspondances.
Avantages :

  • Grande vitesse. Pourrait être utilisé pour cela tout de suite tableau mysql avec des mots
  • Simplicité. Le script d’un tel algorithme ne prendrait que quelques dizaines de lignes.
  • faible précision, manque de correction d'erreur

Recherche floue

Il a donc été décidé de tout faire comme le font les « adultes ». Ceux. Correction automatique des erreurs et recherche non seulement par correspondance exacte de mots, mais également par forme de mot. Parce que Je voulais plus de performances, la recherche n'était pas écrite en PHP, mais en Java, qui restait constamment en mémoire et stockait un index d'articles.

Tige

Nous avons d'abord dû décider comment généraliser différentes formes un mot. Nous supposerons que les mots identiques sont des mots ayant la même racine. Mais extraire la racine n’est pas une tâche facile. Pour résoudre ce problème, j'ai rapidement recherché sur Google ce qu'on appelle « Potter stemmer » (site Web de l'auteur). Le stemmer de Potter identifie la racine du mot, qui ne coïncide cependant pas toujours avec la racine lexicale. De plus, il a été écrit pour différentes langues, y compris pour le russe. Cependant, l'exemple russe est écrit en PHP et, après l'avoir réécrit un à un en Java, j'ai obtenu un très bon résultat. mauvaise performance. Le problème a été résolu à l'aide d'expressions régulières. À cause de l'aversion expressions régulières j'ai pris exemple tout fait www.algorithmist.ru/2010/12/porter-stemmer-russian.html (Merci à l'auteur).
Le résultat a été une performance au niveau d'un million de mots par seconde.

Correction des fautes de frappe

Il arrive souvent que l'utilisateur fasse une erreur lors de la saisie d'une requête. Par conséquent, nous avons besoin d’un algorithme pour déterminer la similitude des mots. Il existe de nombreuses méthodes pour cela, mais la plus rapide est la méthode des 3 grammes. Son essence est la suivante : On divise le mot en trois lettres successives. On fait de même avec le second. Exemple:
Constitution => CON ONS NST STI TIT ITU TUTS UTSIYA
Constitution => CON ONS NST STT TTU TUTS UTSIYA

Ensuite, nous comparons ces triolets et plus nous obtenons de triolets identiques, plus la similitude des mots est élevée.
Au total, nous avons 6 triples sur 8, soit 75%.
Cette méthode est utile lorsqu'une lettre supplémentaire est manquante ou ajoutée à la requête. Mais lorsqu'une personne remplace une lettre par une autre, on obtient immédiatement 3 trois. Cependant, une lettre supplémentaire ou manquante est généralement une faute de frappe. Mais celui qui a été remplacé est faute d'orthographe. De quels types d'erreurs s'agit-il :

  • Remplacement de a – o et o-a : maloko, pAbeda, rOdon
  • E-e, e-e. Bida, pérog
  • Il est incorrect d'utiliser des signes souples et durs.

Par conséquent, mettons tout sous une seule forme :

Remplacement de chaîne privée (mot de chaîne) ( word=word.replace("a","o"); word=word.replace("e","i"); word=word.replace("b","p " ); mot=mot.replace("d","t"); mot=mot.replace("g","k"); mot=mot.replace("w","sh"); = word.replace("b","b"); word=word.replace("zh","w");

Ainsi, nous devons parcourir tous les mots disponibles et trouver celui qui se ressemble le plus. Pour 1 million de mots, cela représente environ 1 s, ce qui n'est pas acceptable. Optimisons. Pour commencer, supposons que nous nous intéressons à des mots dont la longueur diffère d'un maximum de 2 lettres. On note alors que dès trois lettres il n'y a que 30 000 variantes (33*33*33). Par conséquent, hachons-le au stade de l'indexation ;

Chaîne gramms=get3gram(mot);

entier je = 0 ;
for (String gram:gramms) ( if (this.tgram_abc[i]==null) this.tgram_abc[i]=new ArrayList(); this.tgram_abc[i].add(id); i++; )

Ensuite, nous ferons la même chose pour le mot avec les lettres « réduites », puis remplacerons nn par n et l'ajouterons au troisième tableau, et enfin supprimerons tous les caractères logiciels. Vous pouvez désormais rechercher des mots similaires. Nous divisons les mots en grammes, trouvons le hachage de chaque triple et obtenons une liste de mots dans lesquels certains occupent des positions similaires.<=len+2;l++) for (int j=StartG;j<=EndG;j++) if (this.tgram_abc[l][j]!=null) for (int id:this.tgram_abc[l][j]) if (!GramBalls.containsKey(id)) GramBalls.put(id, (1-(double)Math.abs(len-l)/3) /(word.length()-2));

Carte de hachage
Ensuite, on recherche de la même manière le mot « réduit » de la requête et le mot avec les signes nn et soft remplacés. Certes, au lieu de 1, il y aura respectivement 0,7 et 0,3.
Ensuite, nous trions les mots par points et sélectionnons le mot avec le plus grand nombre de points. Cependant, si le « champion » a moins de 0,1 point, alors nous renvoyons null. Ceci est nécessaire pour éviter de prendre en compte des mots complètement différents. Parce que L’algorithme ci-dessus détermine que « astronaute » et « asthme » ont une similarité de 0,05.

Mécanisme d'indexation

Pour les « adultes », l'indexation est effectuée par des programmes d'araignées spéciaux qui explorent périodiquement les sites, indexent le contenu, recherchent des liens sur la page et les suivent plus loin. Chez nous, tout est simple. Lors de l'ajout d'une page, le script php envoie une requête à notre moteur de recherche pour indexer la page. Ensuite, la page est débarrassée des balises. Ensuite, cela se décompose en mots. Après cela, la langue du mot est déterminée. Nous parcourons le mot et pour chaque lettre nous ajoutons un point pour les langues qui prennent en charge ce caractère. Pour le russe, c'est a-z et le trait d'union « - ». Pour l'anglais, c'est a-z, un trait d'union et une apostrophe ('). Tous les symboles et chiffres sont placés dans un « langage symbolique » distinct.
Pour le stockage et la recherche rapide, nous disposons d’un éventail de listes de mots.

Liste de tableaux WordIndex[langue du texte][index du texte du service][langue des mots]

Cette liste stocke la position du mot dans l'article et l'identifiant de l'article.
De même, nous créons un tableau pour stocker les racines des mots.
Ensuite, nous prenons le titre et l'indexons comme un autre texte.

Mécanisme de recherche et de classement

Il s’agit du mécanisme le plus important de tout moteur de recherche. L'opinion des utilisateurs dépend de la manière dont les résultats sont correctement générés.
Lorsque l'utilisateur clique sur le bouton de recherche, le script php transmet la requête au moteur de recherche. Il le décompose en mots. Seulement ici, il y a une différence avec l'indexation. Si, lors de l'ajout d'un article, lorsque nous rencontrons un mot inconnu, nous l'ajoutons à la liste de mots, alors lorsque nous rencontrons un mot inconnu dans une requête, nous recherchons le plus similaire en utilisant la méthode des 3 grammes.
Après division, pour chaque mot, nous obtenons une liste de paires d'identifiant de texte - occurrence du mot.
Déterminons dans quelle mesure l'article est approprié à la demande :

  1. Comptons combien de mots issus des requêtes se trouvent dans l'article.(a)
  2. Comptons combien de racines de requête il y a dans l'article.(b)
  3. Comptons combien de combinaisons de mots sont similaires aux combinaisons de mots dans la requête (c)
  4. Comptons combien de combinaisons de mots de racines sont similaires aux combinaisons de mots dans la requête (d)
  5. Déterminons combien de mots de la requête apparaissent dans l'article(e)
  6. Déterminons combien de racines proviennent de la requête (f)

Après cela, nous ajouterons des points à chaque article selon la formule suivante :

Math.log(2*a+1)+ Math.log(2+1)+2+Math.log(c*5+1))+ Math.log(d*3+1)))*(f+ 2 *e));

La formule a été créée selon les principes suivants :

  1. Les mots priment sur les racines
  2. Les phrases ont priorité sur les mots normaux
  3. Plus un article décrit une requête de recherche de manière complète, plus sa note est élevée. De plus, l’exhaustivité est la clé

Ensuite, parcourons les rubriques, seulement là nous multiplierons les points par 10, car... Le titre reflète l’essence de l’article.
Nous trions et affichons.
L'algorithme ci-dessus traite 100 requêtes par seconde avec un index de 1000 articles sur un VPS doté d'un processeur de 1 GHz.
P.S. Cet article ne sert qu'à présenter quelques algorithmes et idées de recherche floue.

Problèmes techniques de création moteur de recherche de sites

    La création d'un moteur de recherche à part entière pour un site Web est supérieure en termes de complexité, de coût et de temps à la création d'un grand site Web.

    Cette affirmation peut paraître surprenante. Sur de nombreux sites, vous pouvez trouver formulaires de recherche de sites

    . Vous pourriez avoir l'impression que puisque le formulaire de recherche du site fait partie intégrante du site, il devrait alors coûter moins cher que le site.

    Cette idée fausse est renforcée par le fait que sur de nombreux sites, vous pouvez trouver des offres de téléchargement gratuit ou pour une somme modique divers scripts et modules logiciels permettant la recherche sur site. En effet, vous pouvez télécharger et installer sur le site un formulaire qui permet d'y saisir des informations et propose un ensemble ordonné d'informations et de liens. Mais ce formulaire ne peut pas encore être qualifié de moteur de recherche de site. Dans presque tous les cas pertinence, exhaustivité et exactitude des résultats produits

    très faible. Au lieu d’un effet positif lié à l’installation d’un moteur de recherche, vous obtenez un effet négatif.

    La multiplication de tels moteurs de recherche est un hommage à la mode. Le client souhaite disposer d'un moteur de recherche. Sans savoir évaluer les résultats d’un moteur de recherche, il ne peut pas comprendre l’efficacité de son travail.

Dans la plupart des cas, l'acceptation et la livraison d'un site incluant un moteur de recherche se déroulent à peu près comme ceci. Le webdesigner invite le client à saisir un mot disponible sur le site et à cliquer sur le bouton de recherche. Si le moteur de recherche renvoie des résultats, tout va bien. Le propriétaire du site est ravi.

Le concepteur Web ne dit rien sur l’exactitude et l’exhaustivité de ces résultats.

    Le site est dédié au web design. L'accent est mis principalement sur la création et la refonte de sites Web. L'expression « création de site Web » apparaît à plusieurs reprises sur le site, mais il n'y a pas d'expression « production de site Web » ou « développement de site Web ».

    Il est obligatoire d'inclure un moteur de recherche dans le site. L'algorithme de recherche du moteur est basé sur l'indexation du texte du site.La recherche s'effectue à l'aide de mots-clés et d'expressions clés contenus dans le texte des fichiers indexés.

    Le principe de base pour évaluer la pertinence des informations textuelles est la fréquence d'apparition des mots-clés et des expressions.

    Si vous demandez « développement de site Web » ou « production de site Web », le moteur de recherche ne renverra aucun résultat. Après tout, de telles phrases n'existent pas sur le site. Un visiteur déçu quittera le site sans trouver l’information dont il a besoin.

Le concepteur Web ne dit rien sur l’exactitude et l’exhaustivité de ces résultats. 2

    Vous pouvez améliorer le fonctionnement du moteur de recherche. Mais pour cela, le moteur de recherche doit être configuré manuellement, en indiquant quelles pages doivent recevoir des liens si le texte du site ne contient pas les mots-clés ou expressions demandés, mais contient d'autres mots et expressions de sens similaire.

    Le mot web design apparaît à plusieurs reprises sur le site. Le visiteur peut saisir par erreur : web design, web design, web design, etc. Tous les mots-clés ci-dessus désignent le même concept, mais sont orthographiés différemment.

    Mais le moteur de recherche peut signaler qu'aucun résultat n'a été trouvé.

Le concepteur Web ne dit rien sur l’exactitude et l’exhaustivité de ces résultats. 3

    Le visiteur peut vouloir dire « web design », mais demander d'autres mots : web studio, web studio, web studio, web studio, web studio, web studio, web studio, web studio, web mastering, web design studio, design studio, etc. .d. Si les mots spécifiés ne figurent pas sur le site, le moteur de recherche signalera qu'aucun résultat n'a été trouvé.

    Et dans ce cas, vous pouvez améliorer le fonctionnement du moteur de recherche. Pour ce faire, le moteur de recherche doit être configuré manuellement, en indiquant quelles pages doivent recevoir des liens si le texte du site ne contient pas les mots-clés ou expressions demandés, mais contient d'autres mots et expressions de sens similaire.

    Dans ce cas, vous pouvez également réparer le moteur de recherche. Le moteur de recherche doit être configuré manuellement, en indiquant quelles pages doivent recevoir des liens si le texte du site ne contient pas les mots-clés ou expressions demandés, mais contient d'autres mots et expressions de sens similaire.

Note:

    Tout internaute expérimenté peut donner de nombreux exemples de mauvais fonctionnement des moteurs de recherche.

    Ce n'est pas un hasard si l'algorithme du moteur de recherche et la note qu'il construit en fonction de la requête prend en compte et analyse de nombreux paramètres.

    Développement manuel du moteur de recherche nécessite un niveau d'alphabétisation élevé, une vision large, les qualifications les plus élevées de l'interprète, une connaissance approfondie du sujet commercial, un travail monotone et minutieux avec une revérification du même résultat plusieurs fois. Le coût du réglage manuel d'un moteur de recherche peut être plusieurs fois supérieur au coût de création du site auquel le moteur est destiné.

    Naturellement, lors de la création de la plupart des sites Web professionnels, avec un budget allant jusqu'à 40 000 à 50 000 dollars, le réglage manuel des moteurs de recherche n'est pas rentable.

    Augmenter la complexité de l'algorithme du moteur de recherche, d'une part, peut augmenter la pertinence, mais, d'autre part, conduire à de nouvelles erreurs.

CV

    La création d'un moteur de recherche à part entière pour un site Web est supérieure en termes de complexité, de coût et de temps à la création d'un grand site Web.

    Il existe des solutions techniques alternatives simples, peu coûteuses, efficaces et éprouvées pour la recherche de sites qui ne nécessitent pas d'intervention humaine et n'imposent pas d'exigences strictes en matière de compatibilité logicielle et matérielle avec le serveur.

    L'utilisation de solutions de circuits simples permet au visiteur de trouver rapidement les informations dont il a besoin et, par conséquent, d'augmenter les profits du propriétaire du site.

Ivan Maksimov

Capacités du moteur de recherche DataparkSearch

Comment organiser une recherche d'informations sur un serveur de fichiers non seulement par le nom et le type de document, mais aussi par son contenu ? Est-il possible de créer un outil adapté, accessible et transparent pour les utilisateurs ?

Actuellement, la question de la recherche d'informations devient de plus en plus pertinente. Sur Internet, il existe depuis longtemps une concurrence entre les moteurs de recherche, proposant constamment de nouveaux services, capacités et mécanismes de recherche avancés. Mais les données nécessaires sont difficiles à trouver non seulement sur Internet. Une quantité énorme s’accumule également sur les ordinateurs personnels des utilisateurs, et comprendre cette variété est parfois très difficile. Dans les organisations, les informations sont le plus souvent centralisées et triées sur des serveurs de fichiers, mais avec le temps, retrouver les documents nécessaires devient difficile. Les fabricants de logiciels ont répondu à ce besoin. Il existe aujourd'hui des dizaines de moteurs de recherche qui fonctionnent localement sur un PC, et des moteurs de recherche basés sur serveur sont également apparus.

Les moteurs de recherche locaux sont pour la plupart distribués gratuitement, tandis que les versions d'entreprise qui permettent aux utilisateurs de rechercher des informations sur un serveur sont assez coûteuses. Bien entendu, en achetant un produit commercial, nous bénéficions d'un support technique compétent et d'autres avantages, mais les petites organisations ou les propriétaires de réseaux privés ne sont pas toujours en mesure de payer des milliers de dollars pour de tels produits. Heureusement, dans le monde Open Source, il existe des projets gratuits aussi fonctionnels que leurs concurrents commerciaux, avec un support et des mises à jour de haute qualité.

Nous allons maintenant considérer l'une des options permettant d'organiser une recherche de documents sur un serveur de fichiers, qui a été mise en œuvre pour une tâche spécifique.

Conditions initiales

Il existe un serveur de fichiers exécutant le système d'exploitation Linux. Les packages populaires samba et pro-ftp sont installés pour le partage de fichiers. Le disque utilise le système de fichiers reiserfs, car il est le plus productif pour travailler avec un grand nombre de petits fichiers (documents, environ 3 000, de différents formats : txt, html, doc, xls, rtf). Les données ont été triées, mais leur volume augmente chaque jour ; la suppression des informations obsolètes ne résout pas le problème. Comment organiser une recherche par noms et types de documents, ainsi que par contenu ? Comment le mettre à la disposition des utilisateurs dans réseau local?

Pour résoudre ces problèmes nous avons besoin d'un moteur de recherche, d'un serveur de base de données (MySQL, firebirg, ...), Serveur Web Apache et environ un gigaoctet d'espace disque pour le fonctionnement du complexe.

Quel moteur de recherche choisir ?

Il existe des moteurs de recherche locaux tels que Google Desktop Search ou Ask Jeeves Desktop Search. Peut-être que ces moteurs peuvent être utiles pour organiser des recherches dans une petite entreprise ou sur le poste de travail d’un utilisateur exécutant le système d’exploitation Windows, mais pas dans ce cas. Les « monstres » de recherche comme Yandex coûtent très cher, mais si vous avez besoin d'une aide de développeur de haute qualité, les grandes entreprises devront peut-être penser à le louer. Il existe plusieurs projets pour la famille *nix. Voici les moteurs :

  • DataparkRecherche
  • Index des mots
  • ASPcherche
  • Beagle
  • MnogoRecherche

Les moteurs répertoriés se positionnent comme des moteurs de recherche distribués gratuitement pour travailler sur des réseaux locaux et/ou mondiaux. Je tiens à souligner que de nombreux projets ne sont pas multiplateformes et ne fonctionnent pas sous les systèmes d'exploitation Microsoft. Pour les systèmes Windows, il existe des solutions serveur, telles que : MnogoSearch et « Snoop ».

Examinons donc brièvement les moteurs de recherche pour la plateforme *nix :

Beagle est le successeur du moteur SUSE Linux Htdig. La dernière distribution SUSE à inclure le moteur Htdig était le numéro 9 ; dans les versions ultérieures, Novell l'a remplacé par beagle. Htdig a terminé son développement en 2004, la dernière version disponible est la 3.2.0b6 datée du 31 mai 2004. Le nouveau moteur de SUSE se positionne comme un moteur de recherche local, mais il peut également être utilisé dans un environnement d'entreprise.

MnogoSearch (anciennement UdmSearch) est un moteur connu et assez répandu. Il existe des versions pour les plateformes Windows (version gratuite de 30 jours) et *nix (licence GNU). Il est possible de travailler avec presque toutes les versions courantes du SGBD SQL pour les deux plates-formes. Malheureusement, il y a beaucoup de plaintes concernant ce moteur, je ne l'ai donc pas choisi.

Wordindex est un moteur en cours de développement (au moment de la rédaction, la dernière version disponible est la 0.5 datée du 31 août 2000). Fonctionne en conjonction SGBD MySQL et Internet Serveur Apache. Un projet réalisable est présenté uniquement sur le site Web des développeurs.

ASPseek est un moteur de recherche qui était assez répandu dans le passé, mais en 2002 ce moteur a arrêté son développement (la dernière version disponible de ce moteur de recherche est la 1.2.10 du 22 juillet 2002).

DataparkSearch est un clone du moteur de recherche MnogoSearch. Vous permet de rechercher à la fois par noms de fichiers et par leur contenu. Le traitement des fichiers txt, des documents HTML et des balises mp3 est intégré pour traiter le contenu d'autres types de documents dont vous avez besoin ; modules supplémentaires. Il est possible de rechercher des informations aussi bien sur le disque dur local que sur le réseau local/mondial (http, https, ftp, nntp et news).

Le moteur de recherche fonctionne avec les SGBD SQL les plus courants, tels que MySQL, Firebird, PostgreSQL et autres. Selon les développeurs, DataparkSearch fonctionne de manière stable sur différents systèmes d'exploitation *nix : FreeBSD, Solaris, Red Hat, SUSE Linux et autres. Par rapport à MnogoSearch, certains bugs ont été corrigés dans le moteur et certaines fonctions ont été améliorées. Le site Web des développeurs fournit des liens vers des versions fonctionnelles du moteur sur Internet. Un gros plus est une documentation de haute qualité en russe.

Ainsi, après avoir comparé tous les avantages et inconvénients, le moteur de recherche DataparkSearch a été choisi pour mettre en œuvre la recherche sur le serveur de fichiers.

Installation

Pour travailler, nous aurons besoin : d'un serveur web Apache, d'un serveur de base de données MySQL et des codes sources DataparkSearch. Nous installons le serveur Apache et la base de données MySQL (avec toutes les bibliothèques nécessaires). Si un autre SGBD est installé sur votre serveur, vous pouvez également l'utiliser (voir la documentation du moteur). Ensuite, déballons les archives DataparkSearch et commençons à assembler notre complexe.

Exécutons le script install.pl et répondons aux questions nécessaires : sélection du dossier d'installation du moteur, des bases de données et autres liés aux paramètres de fonctionnement du moteur. Il est recommandé de laisser les paramètres par défaut. Les utilisateurs expérimentés, après avoir lu la documentation située dans le dossier doc, peuvent configurer manuellement le moteur (commande configure). Si le script ne trouve pas mysql lors de l'installation, les bibliothèques de développement (libmysql14 devil) risquent de ne pas être installées. Nous allons maintenant compiler et installer DataparkSearch à l'aide des commandes make et make install.

Configuration minimale

Créons une base de données :

sh$ mysqladmin créer une recherche

À l'aide de la commande mysqlshow, nous afficherons toutes les tables de la base de données. Je voudrais tout de suite noter qu'il est plus pratique de travailler avec MySQL en utilisant la console Web phpmyadmin, mais vous pouvez vous en sortir avec un ensemble d'utilitaires standard. Vous devez créer un nouvel utilisateur dans MySQL :

sh#mysql --user=root mysql

mysql> ACCORDER TOUS LES PRIVILÈGES SUR *.* À user@localhost

IDENTIFIÉ PAR « mot de passe » AVEC OPTION DE SUBVENTION ;

sortie

Redémarrons MySQL.

Disons que le nom d'utilisateur est chercheur et le mot de passe est qwerty.

Nous créons maintenant le fichier indexer.conf dans le dossier /etc/ du moteur ; des exemples de ce fichier (pour certaines tâches) peuvent être trouvés dans le dossier /doc/samples du code source de DataparkSearch. Un exemple avec des réglages minimaux est présenté sur la Fig. 1.

Regardons le dossier de plus près. Comme mentionné dans le commentaire, la commande DBAddr spécifie le chemin d'accès au serveur SQL (dans notre cas, MySQL), comment les données sont stockées et d'autres paramètres (si nécessaire). Il existe plusieurs modes de stockage : si vous ne spécifiez pas dpmode, la valeur par défaut sera unique - la plus lente. Il est recommandé d'utiliser le mode cache, mais si vous rencontrez des problèmes avec celui-ci, vous pouvez utiliser le mode multi, moins efficace, mais plus facile à configurer. Une description détaillée de tous les paramètres dbmode peut être trouvée dans la documentation.

DoStore stocke des copies compressées de documents indexés. Sections est un module qui fournit des options d'indexation flexibles. Disons que vous pouvez créer une restriction de balise ou configurer l'indexation non seulement du contenu du fichier, mais également des URL (hôte, chemin, nom). Langmap - cartes de langues spéciales pour reconnaître les encodages et les langues, efficaces si les documents font plus de 500 octets.

Le deuxième fichier de configuration requis est le fichier de résultats de recherche search.conf. Il est recommandé de prendre un modèle prêt à l'emploi (fichier /etc/search.htm-dist) et de le modifier en fonction de vos besoins. Il convient de noter que les principaux paramètres spécifiés dans le fichier indexer.conf doivent correspondre aux paramètres de search.htm, sinon des erreurs se produiront lors du fonctionnement du moteur. Search.htm se compose de plusieurs blocs : le premier - variables - contient les données nécessaires au fonctionnement du moteur (script search.cgi), et tous les autres blocs sont nécessaires à la génération de la page de résultats de recherche html. Un exemple de bloc de variables dans search.conf est présenté dans la Fig. 2.

Examinons de plus près search.htm. Comme vous pouvez le constater, les paramètres DBAddr et LocalCharset sont identiques aux paramètres identiques dans indexer.conf. Si votre client Web prend en charge le format XML, vous pouvez définir le paramètre ResultContentType text/xml. Ci-dessous se trouvent les blocs HTML nécessaires à la conception de la page de résultats ; ils ne sont pas présentés ici en raison de leur grande taille. Il est recommandé d'utiliser un modèle prêt à l'emploi situé dans le fichier /etc/search.htm-dist. La documentation qui l'accompagne décrit en détail le format des blocs HTML (conception) ; chacun peut le personnaliser à sa guise.

Vous pouvez maintenant exécuter le fichier indexeur à partir du dossier sbin du moteur DataparkSearch avec le paramètre -Ecreate. Si tout a été fait correctement, les tables SQL nécessaires seront créées dans la base de données. Si des erreurs se produisent, vous devez vérifier le nom d'utilisateur et le mot de passe mysql dans le fichier indexer.conf, c'est l'erreur la plus courante.

Pour les tests, il est recommandé d'indexer une petite section de la ressource, afin qu'en cas d'erreurs, une nouvelle réindexation ne prenne pas beaucoup de temps. L'indexation est effectuée par la commande indexer sans paramètres ; nous obtiendrons ainsi les résultats : temps passé, nombre de documents et rapidité de travail.

Copions le fichier bin/search.cgi du répertoire DataparkSearch vers le dossier cgi-bin de notre serveur web et éditons le fichier index.shtml de notre serveur web Apache (situé dans le dossier html), en y ajoutant le code du formulaire de recherche :

Vous pouvez désormais accéder à la ressource localhost à l'aide de n'importe quel navigateur disponible. Dans le formulaire qui apparaît, saisissez le mot de recherche, par exemple « processeur » (voir Fig. 3). En conséquence, nous devrions recevoir une page avec les résultats de la recherche, si, bien entendu, de tels documents existent (voir Fig. 4). Si un document contenant des erreurs apparaît à la place d'une page contenant des résultats de recherche, vous devez vérifier le fonctionnement du script. En allant dans le répertoire cgi-bin du serveur web, exécutez le script « search.cgi test >> test.htm ». Si la page de résultats est correctement formée, vous devez vérifier la configuration du serveur Apache : si le chemin d'accès au script cgi est correctement spécifié, si le script de test test.cgi est en cours d'exécution dans le répertoire du serveur Web.

Si test.htm est vide ou contient également des erreurs, il est recommandé de vérifier si les données existent dans la base de données, cela se fait avec la commande « indexer -S ». Peut-être devriez-vous réindexer le serveur avec la commande « indexer – v 5 » – niveau maximumémettre des informations de débogage. En définissant la commande LogLevel 5 dans le fichier search.htm et en consultant attentivement les journaux du serveur Web, vous pouvez découvrir comment les données sont traitées dans le serveur SQL.

Ajout de modules supplémentaires (parsets)

Par défaut, le moteur ne fonctionne qu'avec fichiers html et txt, mais il est possible d'installer des modules supplémentaires (parsets) qui convertissent d'autres types de documents en html ou txt (texte brut). Il est possible de travailler avec xls (Excel), doc (Word), rtf (Word), ppt (Power Point), pdf ( Lecteur Acrobat) et même les fichiers rpm (RedHar Package Manager), ces derniers n'afficheront que des métadonnées. Dans notre cas, nous devrons traiter des formats bureautiques. Il existe plusieurs parsets pour xls et doc : catdoc convertit les documents au format txt, XLHTML et vwHtml convertissent les fichiers au format HTML.

Je recommande d'utiliser le package catdoc, car la vitesse de conversion au format txt est beaucoup plus rapide que la conversion au format HTML et le programme XLHTML se bloque parfois lors de la conversion de documents. Même si les développeurs avaient prévu ce problème et ils recommandent de définir le paramètre ParserTimeOut 300 dans indexer.conf (le nombre est indiqué en secondes) pour éviter le gel du parset, mais le temps d'indexation augmentera alors encore plus.

Nous aurons également besoin d'un autre parset - unrtf - pour travailler avec les fichiers rtf ; il convertit les documents en code html ou en format texte/plain au choix de l'utilisateur.

Téléchargez et installez forfaits requis, pour connecter le parset, vous devez ajouter les lignes suivantes à indexer.conf :

Pour format xls(le programme xls2csv est inclus dans le package catdoc) :

Application Mime/vnd.ms-excel text/plain "xls2csv $1"

Application AddType/vnd.ms-excel *.xls *.XLS

Pour documents documentaires les paramètres ressemblent à ceci :

Application MIME/texte MSword/plain "catdoc $1"

Application AddType/vnd.ms-excel *.doc *.DOC

traitement des documents RTF :

AddType texte/rtf* *.rtf *.RTF

AddType application/rtf *.rtf *.RTF

Mime text/rtf* text/html "/usr/local/bin/unrtf --text $1"

Application Mime/rtf text/html "/usr/local/bin/unrtf --text $1"

Il convient de rappeler que certaines applications Windows créent parfois des fichiers avec la même extension dans majuscule, ajoutons donc les mêmes extensions à la liste AddType, mais avec des noms différents.

Vous pouvez ajouter n'importe quel type de document à indexer, mais le moteur n'affichera que les liens vers les noms de fichiers.

Disons que si vous avez besoin d'indexer des fichiers RPM ou ISO et d'en obtenir des métadonnées, vous devrez d'abord trouver le programme correspondant (parset) et ajouter paramètres requis dans index.conf. La liste des types de documents supportés se trouve par exemple dans le fichier mime.types du serveur Apache. Des solutions prêtes pour convertir des fichiers ou en obtenir des métadonnées peut être trouvé parmi les paramètres du package Commandant de minuit, dans le fichier mc.ext.

mode de stockage en cache

Il existe plusieurs façons d'accélérer le moteur, l'une d'elles consiste à utiliser la méthode de stockage des données en cache. Pour travailler dans ce mode, nous avons besoin des utilitaires mis en cache et run-splitter, situés dans le répertoire sbin relatif au moteur. Si vous avez déjà créé une base de données SQL dans un mode différent (dpmode), n'oubliez pas de la supprimer au préalable et ensuite seulement de changer le mode de stockage. Effacons la base de données avec les commandes : « indexer -C » (nettoyage des tables SQL) et « indexer Edrop » (suppression de tables). Ensuite, créez à partir du fichier modèle cached.conf-dist situé dans dossier etc. notre moteur, fichier cached.conf. N'oublions pas de modifier les paramètres d'accès à la base de données SQL :

Vous pouvez maintenant éditer les fichiers index.conf et search.conf en modifiant leurs paramètres :

indexeur.conf

DBAddr mysql://searcher:qwerty@localhost/search/?dbmode=cache&cached=localhost:7000

recherche.htm

DBAddr mysql://searcher:qwerty/search/?dbmode=cache

Ce changement est généralement suffisant, mais si vous souhaitez obtenir une flexibilité moteur encore plus grande, il est recommandé de vous familiariser avec paramètres supplémentaires mode cache et apportez les modifications nécessaires aux fichiers de configuration.

mis en cache & 2> cached.out

Le démon démarrera et écrira les informations de débogage dans le fichier cached.out. Le port mis en cache par défaut est 7000, mais il peut être modifié si nécessaire (dans cached.conf).

Recréons des tables SQL pour le nouveau mode de stockage de données à l'aide de la commande « indexer -Ecreate » et indexons le serveur – indexeur. Une fois terminé, exécutez la commande :

exécuter-splitter -k

je dois dire que cette méthode accélère non seulement la vitesse de recherche dans la base de données, mais également la vitesse d'indexation. Nous pouvons maintenant essayer de rechercher dans la base de données ; si tout a été fait correctement, nous obtiendrons des résultats de recherche.

Fonctionnalités supplémentaires

Dans la configuration ci-dessus, nous avons utilisé paramètres minimaux paramètres, avec l'aide de paramètres supplémentaires, vous pouvez obtenir une plus grande fonctionnalité et une plus grande flexibilité du moteur, tout dépend des tâches. Pour augmenter la vitesse du moteur de recherche, vous pouvez utiliser le module mod_dpsearch pour le serveur Apache. Le besoin de ce module se fait sentir si des centaines de milliers de documents sont indexés et qu'il est nécessaire d'augmenter au maximum la vitesse du moteur. Également dans la documentation, vous pouvez trouver d'autres méthodes pour accélérer le moteur, par exemple : Optimisation SQL Base de données ou utilisation mémoire virtuelle comme cache.

Très souvent, il est nécessaire de rechercher des formes grammaticales de mots. Disons que nous avons besoin de toutes les formes du mot "processeur" (processeurs, processeurs, ...), pour cela nous pouvons configurer les modules ispell ou aspell. Plus de détails à leur sujet sont écrits dans la documentation.

DataparkSearch a la capacité d'indexer les segments du réseau ; cela se fait par le paramètre : subnet 192.168.0.0/24 dans indexer.conf.

Il est également possible de désactiver l'indexation certains types fichiers ou dossiers spécifiques sur les serveurs : Interdire *.avi ou Interdire */cgi-bin/*.

Dans les modèles fichiers de configuration vous pouvez trouver des descriptions (avec des exemples) d'autres paramètres utiles, qui peut être nécessaire pour mettre en œuvre une tâche spécifique.

Conclusions

Le moteur de recherche DataparkSearch est un outil puissant pour travailler avec des ressources Web situées à la fois sur le réseau local et sur le réseau mondial. Le projet est en constante évolution et en cours de finalisation, au moment de la rédaction de cet article le dernier version stable moteur 4.38 (daté du 13/03/2006) et instantané 4.39 (daté du 19/04/2006). Je dois noter que les mises à jour dernière version se produisent presque tous les deux jours.

Nous n'avons pas envisagé la question de la création d'un public service de recherche sur Internet, si vous en avez besoin, lisez la documentation pertinente sur le SGBD, le serveur Web et d'autres problèmes liés à la protection des informations contre les accès non autorisés.

Application

Emploi

Le serveur a été installé sur la machine : AMD Athlon 2500 Barton, 512 Mo DDR 3200 (double), disque dur WD 200 Go SATA (8 Mo de cache, 7200 tr/min). Configuration du moteur : moteur DataparkSearch (v4.38), SGBD MySQL (v4.1.11), serveur web Apache (v1.3.33), les fichiers doc, xls, rtf (conversion en texte/plain), html, txt sont indexés. Le mode de stockage de données multiples est utilisé. Le traitement d'environ 2 000 fichiers situés sur cette machine (taille du disque ~1 Go) et l'indexation de leur contenu nécessitent 40 minutes, la taille de la base de données après travail est d'environ 1 Go. Je dois noter que la vitesse du moteur avec des ressources non locales dépendra de la vitesse du canal. De plus, la vitesse d'indexation dépend des parsets utilisés. L'utilisation du mode de stockage en cache améliore les performances d'environ 15 à 20 %. Les navigateurs Web sont utilisés comme logiciels clients ; le travail a été testé sur : Firefox, Opera, Konqueror, Microsoft Internet Explorer et même Lynx - pas de problèmes. L'ensemble du travail de la partie serveur du moteur peut être automatisé à l'aide du démon cron bien connu, en y plaçant les paramètres nécessaires à l'indexation des données.

  • PostgreSQL - http://www.postgresql.org.
  • Apache - http://www.apache.org.
  • Catdoc - http://www.45.free.net.
  • XLHTML – .
  • vwHtml – .
  • unrtf – ftp://ftp.gnu.org/pub/gnu/unrtf.


  • Des questions ?

    Signaler une faute de frappe

    Texte qui sera envoyé à nos rédacteurs :