Fantasque Time Line Index du Forum Fantasque Time Line
1940 - La France continue la guerre
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Moteur de recherche
Aller à la page 1, 2  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Fantasque Time Line Index du Forum -> Le site
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
loic
Administrateur - Site Admin


Inscrit le: 16 Oct 2006
Messages: 4656
Localisation: Toulouse (à peu près)

MessagePosté le: Dim Mai 05, 2013 15:09    Sujet du message: Moteur de recherche Répondre en citant

Bonjour,

J'ai ajouté un moteur de recherche pour le site (menu de gauche), il scanne le contenu des fichiers PDF.
J'ai pour l'instant indexé la chrono de 1940 et 1941, la chrono de 1942 et les annexes suivront.
Cet outil est pour l'instant rudimentaire, il ne traite qu'un seul mot entier (pas de partie d'un mot). Pas de différence majuscules/minuscules.
Il est possible que je définisse une liste de mots à exclure de la recherche (articles, prépositions, verbes élémentaires, etc).

Merci à tous de me donner votre avis dans ce sujet : rapidité, présentation, éventuelles erreurs de recherche, ...

Attention, le forum conserve son propre moteur de recherche.
_________________
On ne trébuche pas deux fois sur la même pierre (proverbe oriental)
En principe (moi) ...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Thomas27



Inscrit le: 13 Avr 2013
Messages: 677
Localisation: Lyon

MessagePosté le: Dim Mai 05, 2013 20:30    Sujet du message: Répondre en citant

Je viens de faire un première essai, c'est plutôt pas mal.
Je ferais une retour plus poussé au fil de l'usage.
En tous cas c'est bien pratique.
_________________
Ma boutique : https://society6.com/art-of-thomas-diana
Mes livres: http://www.amazon.fr/-/e/B0191PGYUE?ref_=pe_1805951_64028601
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Capu Rossu



Inscrit le: 22 Oct 2011
Messages: 1591
Localisation: Mittlemeerküstenfront

MessagePosté le: Dim Mai 05, 2013 21:14    Sujet du message: Répondre en citant

Bonsoir,

Citation:
J'ai ajouté un moteur de recherche pour le site (menu de gauche), il scanne le contenu des fichiers PDF.


Je ne le trouve pas.

@+
Alain
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
loic
Administrateur - Site Admin


Inscrit le: 16 Oct 2006
Messages: 4656
Localisation: Toulouse (à peu près)

MessagePosté le: Lun Mai 06, 2013 07:33    Sujet du message: Répondre en citant

Menu de gauche du site, entre "Images" et "Forum" : une bête zone de saisie, on tape Entrée et zou !
_________________
On ne trébuche pas deux fois sur la même pierre (proverbe oriental)
En principe (moi) ...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Capu Rossu



Inscrit le: 22 Oct 2011
Messages: 1591
Localisation: Mittlemeerküstenfront

MessagePosté le: Lun Mai 06, 2013 08:39    Sujet du message: Répondre en citant

Bonjour,

Allo, Monsieur l'Opticien ! c'est-y quand que vous me les faites mes nouvelles bésicles ?

OK, vu la bête.
Merci
Alain
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
sting01



Inscrit le: 30 Juil 2010
Messages: 1452
Localisation: Thailande

MessagePosté le: Mar Mai 07, 2013 07:17    Sujet du message: Répondre en citant

Est ce avec Mysql?

Il se trouve que je suis entrain de faire une chose similaire au boulot (referencer les localisation,telles que ville, districts, departements, regions, pays) de tout les hotels que nous avons en stock (250 000 acejour). Cela dans le but de faciliter la recherche de nos clients.

Donc je dois accepter des requetes du genre : hotels phuket et retrourner une liste (10) d'hotels, mais aussi Martinez Cannes, hotel Martinez, hotel croisette ou hotelS croisette; voire meme hotel croisete ...

Objectivement a full search sera trop longue, reponses doivent revenir dans les 500 ms (le temps pris par internet etant inclus dans les 50 ms!).

Donc si je puis te donner un conseil, tu devrais dans un premier temps utilise un 'index inverse'; puis lorsque cela fonctionera, la seconde etape sera un 'map reduce'.

cherche sur wikipedia :

http://en.wikipedia.org/wiki/Index_(search_engine)

C'et en anglais, et c'est voulu, car il y plus d'informations et de liens sur cette page. Cela te donne une bonne idee de comment proceder (la fersion logique).

Le map reduce peut etre trouve sur wiki aussi, je te conseille aussi cette page :

http://blog.cloudera.com/wp-content/uploads/2010/01/5-MapReduceAlgorithms.pdf

cela te donne une idee du genre d'algorithme a utiliser

celle ci est un peu plus detaillee :

http://highlyscalable.wordpress.com/2012/02/01/mapreduce-patterns/

A savoir que ces methodes sont celles utilisees par Google (patentee par google devrais je dire) donc supportent des qunatites de donnees qui sont a des magnitudes plus elevees que celle de FTL (imagine le nombre de mot dans les bases de donnees google!!!!!).

En cas de besoin , contacte moi.

La maniere que j;ai adopte pour resoudre mon probleme a ete :

1) separes tout les noms (pays, regions, villes, hotels) en un mot (Kuala Lumpur donnant donc 2 mots);

2) inserer dans une table ce mot avec l'id de reference et un bit specificiant le niveau (hotel, district, region, departement, pays ...)

A cepoint, 30 000 000 de lignes dans la table, reponse en moyenne a moins d'une seconde (mais 6 sec si une personne tape HOT, car c'et l'occurence la plus frequente, 1 500 000 lignes commence par HOT)

Ce construct est appele un ' FORWARD INDEX' c'est actuellement ce que nos clients utilise.

En preparation (car j;ai d'autres taches) :

3) creer une nouvelle table, utilisant le 'inverted index' (done).

4) la remplir avec cette query :
INSERT INTO inverted_index (search_named, inverted_index) )SELECT search_named,GROUP_CONCAT(DISTINCT CONCAT('(',CONCAT_WS(',', id_src_non_hotel,total),')') ORDER BY id_src_non_hotel ASC) FROM search_name3 GROUP BY search_named)

(done).

cela me donne 350 000 lignes (100 fois moindre).

Il ne me reste plus qu'a trouver une bonne solution pour reduire la taille des reponses( j;ai une idee mais pas encore testee).

Point crucial :

la recherche doit etre :

SELECT * FROM your_table WHERE mot LIKE 'abc%';

Remarques STP qu'il n;y a pas de signe % a gauche, donc on utilise les index.

Autre point encore plus crucial :

lorsque tout est prete , tu dois :

1) Optimize table your_table (enlever une partie du overhead)

2) ALTER TABLE your_table ORDER BY searchable_column ASC;

Cela va eviter les I/O bottlenecks.

Desole pour le franglais, mais je pense en anglais desqu'il s'agit de DB.

N'hesite pas, j;ai peut etre la solution dont tu reves depuis longtemps (joke).

Eric
_________________
La can can-can, cancouillote,
c'est pas fait pour les francois.

Anscarides je suis ne,
heritier de la Comte je serai.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
loic
Administrateur - Site Admin


Inscrit le: 16 Oct 2006
Messages: 4656
Localisation: Toulouse (à peu près)

MessagePosté le: Mar Mai 07, 2013 07:34    Sujet du message: Répondre en citant

Pour faire court : oui il y a une BDD MySQL, je dois encore m'occuper des index. J'en reparle tout à l'heure.
_________________
On ne trébuche pas deux fois sur la même pierre (proverbe oriental)
En principe (moi) ...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
loic
Administrateur - Site Admin


Inscrit le: 16 Oct 2006
Messages: 4656
Localisation: Toulouse (à peu près)

MessagePosté le: Jeu Mai 09, 2013 09:39    Sujet du message: Répondre en citant

Le "tout à l'heure" ayant quelque peu dérapé Embarassed, voici quelques infos : le moteur est basé sur une base de de données MySQL alimentée et consultée par PHP.
2 tables :
- fichiers : chaque ligne correspond à un fichier, avec un numéro unique, son emplacement et la date de dernière indexation ; actuellement 258 enregistrements ; pas d'index nécessaire sur cette table
- mots : chaque ligne correspond à un mot avec le numéro du fichier dans lequel il figure (un mot apparaît sur plusieurs lignes s'il est dans plusieurs fichiers) ; actuellement 438759 enregistrements, soit 57604 mots uniques, mais il y a probablement du ménage à faire ; les champs sont indexés.

Je n'ai pas filtré sur les mots communs (articles, prépositions, verbes courants, etc) comme le font certains moteurs de recherche, cela peut encore changer.

J'ai indexé la chrono de 1942 (janvier - août).
_________________
On ne trébuche pas deux fois sur la même pierre (proverbe oriental)
En principe (moi) ...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
sting01



Inscrit le: 30 Juil 2010
Messages: 1452
Localisation: Thailande

MessagePosté le: Ven Mai 10, 2013 05:02    Sujet du message: Répondre en citant

loic a écrit:
Le "tout à l'heure" ayant quelque peu dérapé Embarassed, voici quelques infos : le moteur est basé sur une base de de données MySQL alimentée et consultée par PHP.
2 tables :
- fichiers : chaque ligne correspond à un fichier, avec un numéro unique, son emplacement et la date de dernière indexation ; actuellement 258 enregistrements ; pas d'index nécessaire sur cette table
- mots : chaque ligne correspond à un mot avec le numéro du fichier dans lequel il figure (un mot apparaît sur plusieurs lignes s'il est dans plusieurs fichiers) ; actuellement 438759 enregistrements, soit 57604 mots uniques, mais il y a probablement du ménage à faire ; les champs sont indexés.

Je n'ai pas filtré sur les mots communs (articles, prépositions, verbes courants, etc) comme le font certains moteurs de recherche, cela peut encore changer.

J'ai indexé la chrono de 1942 (janvier - août).

Donc tu as ton "forward index", ce que tu devrais faire est de construire ton "inverted index" (desole pour les noms en anglais, je ne connais pas ceux en francais).

disons actuellement tu as :

bat 1526
bat 268
bat 99999
d'af 1526
d'af 8888
d'af 1234
d'af 268

ce que tu dois avoir (inverted index) est :

bat 1526,268,99999
d'af 1526,8888, 1234,268

lorsque une personne va chercher pour bat d'af, tu vas retrouver 2 lines (1 par mot), et tu vas simplement (Php a une function pour ela) croiser les deux resultats (mis auparavant dans array, avec mysql_fetch_array() ).

voila la requete MYSQL que j'utilise (a toi de modifier les nom de colomnes et de tables) :

requetes de verification :

SELECT search_named,GROUP_CONCAT(DISTINCT CONCAT('(',CONCAT_WS(',', id_src_non_hotel,total),')')) FROM search_name3 GROUP BY search_named

cela prend une poignee de secondes.

si le resultat te convient, cree une nouvelle table et run cela :

INSERT INTO inverted_index (search_named, inverted_index) )SELECT search_named,GROUP_CONCAT(DISTINCT CONCAT('(',CONCAT_WS(',', id_src_non_hotel,total),')') ORDER BY id_src_non_hotel ASC) FROM search_name3 GROUP BY search_named)

maintenat, GROUP_CONCAT a une limitation, donc je te suggeres de la supprimer (pour cette session seulement) :

SET SESSION group_concat_max_len = 100000000;
SET SESSION max_allowed_packet = 100000000;
INSERT INTO inverted_index (search_named, inverted_index) (SELECT search_named,GROUP_CONCAT(DISTINCT CONCAT('(',CONCAT_WS(',', substring(id_src_non_hotel,total, ' ' , 1 )),')') ORDER BY id_src_non_hotel ASC) FROM search_name3 GROUP BY search_named)

et voila

Maintenat nous pouvons faire de la recherche multi mot, aussi rapide (si ce n'est plus) que google (car moins de lines dans la DB!).

A noter que ici, le 'map - reduce ' algorithme (what a bitch it is!) est simplement trnsferer a MYSQL pour le bief de GROUP_CONCAT avec le relevant GROUP BY.

Ceci est une patente deposee par google inc; donc pour aussi simple que cela semble il n'en est pas moins de l'informatique de tres haut niveau.
_________________
La can can-can, cancouillote,
c'est pas fait pour les francois.

Anscarides je suis ne,
heritier de la Comte je serai.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
loic
Administrateur - Site Admin


Inscrit le: 16 Oct 2006
Messages: 4656
Localisation: Toulouse (à peu près)

MessagePosté le: Ven Mai 10, 2013 12:52    Sujet du message: Répondre en citant

Mmh, j'avais pensé à stocker la liste des fichiers pour un même mot, mais le gain ne me semble pas énorme, les requêtes sont actuellement assez rapides.
Non, le vrai enjeu serait de pouvoir rechercher des expressions (ex : "Charles de Gaulle"), mais ceci oblige à stocker le texte entier du fichier dans la BDD.
_________________
On ne trébuche pas deux fois sur la même pierre (proverbe oriental)
En principe (moi) ...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
sting01



Inscrit le: 30 Juil 2010
Messages: 1452
Localisation: Thailande

MessagePosté le: Ven Mai 10, 2013 21:22    Sujet du message: Répondre en citant

loic a écrit:
Mmh, j'avais pensé à stocker la liste des fichiers pour un même mot, mais le gain ne me semble pas énorme, les requêtes sont actuellement assez rapides.
Non, le vrai enjeu serait de pouvoir rechercher des expressions (ex : "Charles de Gaulle"), mais ceci oblige à stocker le texte entier du fichier dans la BDD.


Oui, c'est cela quidoit etre fait
_________________
La can can-can, cancouillote,
c'est pas fait pour les francois.

Anscarides je suis ne,
heritier de la Comte je serai.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
loic
Administrateur - Site Admin


Inscrit le: 16 Oct 2006
Messages: 4656
Localisation: Toulouse (à peu près)

MessagePosté le: Dim Nov 03, 2013 12:45    Sujet du message: Répondre en citant

Le moteur de recherche du site sera indisponible cet aprem pour cause de maintenance.
_________________
On ne trébuche pas deux fois sur la même pierre (proverbe oriental)
En principe (moi) ...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
loic
Administrateur - Site Admin


Inscrit le: 16 Oct 2006
Messages: 4656
Localisation: Toulouse (à peu près)

MessagePosté le: Sam Nov 09, 2013 09:12    Sujet du message: Répondre en citant

Il reste un bug concernant les accents. Si je recherche le mot "traité", un fichier peut sortir deux fois, pour "traité" et "traite" (sans accent). Je réfléchis à supprimer les accents de la base de données, ce qui permet de trouver certains noms exotiques, étant donné que notre rédac-chef met un point d'honneur à se conformer aux noms étrangers (exemple : Hiyô pour le porte-avions japonais).
_________________
On ne trébuche pas deux fois sur la même pierre (proverbe oriental)
En principe (moi) ...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
sting01



Inscrit le: 30 Juil 2010
Messages: 1452
Localisation: Thailande

MessagePosté le: Lun Nov 11, 2013 04:13    Sujet du message: Répondre en citant

loic a écrit:
Il reste un bug concernant les accents. Si je recherche le mot "traité", un fichier peut sortir deux fois, pour "traité" et "traite" (sans accent). Je réfléchis à supprimer les accents de la base de données, ce qui permet de trouver certains noms exotiques, étant donné que notre rédac-chef met un point d'honneur à se conformer aux noms étrangers (exemple : Hiyô pour le porte-avions japonais).


Supposant que tu utilise Mysql utf-8, tu remarqueras que si tu fais un ORDER BY 'traité'; ce dernier sera toujours en tete. Inversement si tu fais un ORDER BY 'traite'; ce dernier sera en tete.

Cela assume que ta colone ayant le texte a elle meme une collation (qui peut etre ou ne pas etre la meme que la collation de ta table.).

Donc ce que je fais au boulot :

SELECT * FROM ( SELECT t1.country,t1.subregion,t1.district,t1.hotel, t1.total, t1.search_id,t1.subregion_id as id, t1.continent_id FROM v2_src_non_hotel_en as t1 WHERE t1.search_id = 'c10_s46' AND (country LIKE 'singapor%' OR subregion LIKE 'singapor%' OR district LIKE 'singapor%') AND t1.level <> 'continent' AND t1.total >0 UNION SELECT t1.country,t1.subregion,t1.district,t1.hotel, t1.total, t1.search_id,t1.subregion_id as id, t1.continent_id FROM v2_src_non_hotel_en as t1 WHERE t1.search_id = 'c10_s46' AND (country LIKE 'airpo%' OR subregion LIKE 'airpo%' OR district LIKE 'airpo%') AND t1.level <> 'continent' AND t1.total >0 )as s ORDER BY 'airpo' LIMIT 1;

Cela permets de trouver l'aeroport de singapour , qui n'existe pas dans notre base de donnees (c'est Changi, mais dans la subregion singapore). Le ORDER BY permet de differencier pour des villes comme Koln, Köln, ou Køln (danois), et de proposer le resultat attendu (assumant qu;il existe).

Donc ORDER BY (param envoye par l'utilisateur).

Et sois certain que la collation est donnee sur la colonne (en plus de la colation de la table).

En esperant que cela aide! (sinon PM moi).
_________________
La can can-can, cancouillote,
c'est pas fait pour les francois.

Anscarides je suis ne,
heritier de la Comte je serai.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
loic
Administrateur - Site Admin


Inscrit le: 16 Oct 2006
Messages: 4656
Localisation: Toulouse (à peu près)

MessagePosté le: Mar Nov 12, 2013 09:00    Sujet du message: Répondre en citant

Merci pour les infos, cela recoupe ce que j'avais déduit de la doc MySQL.
_________________
On ne trébuche pas deux fois sur la même pierre (proverbe oriental)
En principe (moi) ...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Fantasque Time Line Index du Forum -> Le site Toutes les heures sont au format GMT + 1 Heure
Aller à la page 1, 2  Suivante
Page 1 sur 2

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com