Moteur de recherche GNU pour Linux/PHP

Moteur de recherche GNU pour Linux/PHP - PHP - Programmation

Marsh Posté le 24-11-2004 à 09:49:42    

Salut.
 
On me demande ce qu'il existe comme moteurs de recherche utilisable avec PHP sur plateforme Linux (sur plateforme Windows, je préconise définitivement Index Server qui est présent pas défaut)
 
- Ce moteur de recherche doit indexer des documents sur le disque dur, que ce soit HTML, XML, DOC, XLS ou PDF (principalement).
- Lors d'une recherche, on doit pouvoir réduire le scope de recherche sur un répertoire donné, ou plusieurs répertoires à la fois (pas forcément inclus les uns dans les autres)
- Si possible, un lien avec une BDD MySQL ou PostGre serait le bien venu (pour récupérer un lien entre les fichiers et des éléments de la base par exemple, et filtrer les fichiers par ces éléments BDD), mais ce n'est pas du tout obligatoire.
 
J'ai rapidement commencé à cherché, et j'ai pas trouvé de moteur de recherche qui me convenait. Il faut notamment qu'il puisse indexer les meta des documents (sujet, auteur, etc.) et faire des recherches sur des "mots de la même famille", homonyme et pourquoi pas synonimes.
 
Merci pour votre éclairage.
 
Ha, et si la syntaxe d'interrogation pouvait être simple, ce serait pas mal (TextSearch de Microsoft reprends par exemple une syntaxe SQL)


Message édité par Arjuna le 24-11-2004 à 09:50:44
Reply

Marsh Posté le 24-11-2004 à 09:49:42   

Reply

Marsh Posté le 24-11-2004 à 10:00:36    

Arjuna a écrit :

Salut.
 
On me demande ce qu'il existe comme moteurs de recherche utilisable avec PHP sur plateforme Linux (sur plateforme Windows, je préconise définitivement Index Server qui est présent pas défaut)
 
- Ce moteur de recherche doit indexer des documents sur le disque dur, que ce soit HTML, XML, DOC, XLS ou PDF (principalement).
- Lors d'une recherche, on doit pouvoir réduire le scope de recherche sur un répertoire donné, ou plusieurs répertoires à la fois (pas forcément inclus les uns dans les autres)
- Si possible, un lien avec une BDD MySQL ou PostGre serait le bien venu (pour récupérer un lien entre les fichiers et des éléments de la base par exemple, et filtrer les fichiers par ces éléments BDD), mais ce n'est pas du tout obligatoire.
 
J'ai rapidement commencé à cherché, et j'ai pas trouvé de moteur de recherche qui me convenait. Il faut notamment qu'il puisse indexer les meta des documents (sujet, auteur, etc.) et faire des recherches sur des "mots de la même famille", homonyme et pourquoi pas synonimes.
 
Merci pour votre éclairage.
 
Ha, et si la syntaxe d'interrogation pouvait être simple, ce serait pas mal (TextSearch de Microsoft reprends par exemple une syntaxe SQL)


 
Je vais tester swish-e d'ici peu. C'est un moteur de recherche full-text qui parait-il tourne bien. Nous allons l'integrer dans un environnement PHP également
 
:hello:

Reply

Marsh Posté le 24-11-2004 à 10:30:06    

Ha be, si tu peux tout simplement me tenir au courant de tes tests :D
 
Parceque je dois moi-même bencher ensuite la ou les solutions trouvées afin de choisir celle à mettre en place.:whistle:

Reply

Marsh Posté le 24-11-2004 à 11:27:58    

http://www.phpdig.net/navigation.php?action=doc#toc3
 
c'est celui que j'ai mis en place sur l'Intranet où je bosse sur un plateforme FreeBSD/apache/php4/MySQL
 
les résultats sont plus que satisfaisants

Reply

Marsh Posté le 24-11-2004 à 11:32:57    

arjuna > t'as essayé http://www.htdig.org/ ?


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 24-11-2004 à 12:19:42    

Merci pour ces infos :)
 
Je vais voir ces trois produits et ce que ça donne ! :jap:

Reply

Marsh Posté le 24-11-2004 à 15:34:54    

Pour Swish-e, d'après la dac, il est capable de rechercher des mots de la même famille et des homonymes.
Par contre, rien n'est spécifié pour les fichiers XLS et DOC. :/
 
phpdig, lui, estcapable de lire ces fichiers. Par contre, rien n'est indiqué quant à sa capacité à chercher des mots avec une orthographe variante... Paulmuadib, tu peux me dire si ça marche ? Par exemple, rechercher "boulangerie" et il ressort "boulangère".
 
Quand à htdig, idem que phpdig. Simogeo, tu sais si je peux faire des recherches comme je veux ?
 
Grossomodo, je veux un truc qui est capable de faire comme google (et je ne veux pas d'un moteur qui bouffe directement une string, je veux pouvoir écrire à la main les critères que je veux).
 
C'est à dire que :
- Rechercher l'orthographe exacte
- Rechercher avec une orthographe avoisinante
- Rechercher dans un scope particulier de documents
- AND, OR et NOT évidement
- Mettons que j'ai un client qui appartient à un groupe particulier, je veux pouvoir le faire taper dans un catalogue spécifique, ou alors inclure un certain nombre de critères supplémentaires
 
Grossomodo, pour ceux qui connaissent Index Server ou Oracle Text Search, je recherche un moteur équivalent, et à la même logique d'implémentation.

Reply

Marsh Posté le 24-11-2004 à 15:38:32    

mnogosearch, the best :-)

Reply

Marsh Posté le 24-11-2004 à 15:41:08    

En fait, et c'est un point très important pour moi, je ne veux pas que le langage de requêtage soit fixé.
 
Je veux un truc analogique à ce que j'ai fait sur mon site perso avec SQL Server Full Text Search :
 

Code :
  1. filtre = getFiltreFromKeyWord(replace(trim(request.Form("KEYWORD" )), "'", "''" ), "CONTAINS" )
  2.   sql = "SELECT ID, TITRE_ORI, TITRE_FR, U_LOGIN, TYPE, RANK FROM ( " &_
  3.     " SELECT ID as ID, TITRE_ORI as TITRE_ORI, TITRE_FR as TITRE_FR, U_LOGIN as U_LOGIN, TYPE AS TYPE, KEY_TBL.RANK " &_
  4.     " FROM ENTITE INNER JOIN CONTAINSTABLE (ENTITE, *, ' " & filtre & " ' , " & top_n_by_rank * 3 & " ) AS KEY_TBL " &_
  5.     "   ON ENTITE.ID = KEY_TBL.[KEY] " &_
  6.     " UNION " &_
  7.     " SELECT ID as ID, VILLE AS TITRE_ORI, NOM AS TITRE_FR, U_LOGIN as U_LOGIN, 4 AS TYPE, KEY_TBL.RANK " &_
  8.     " FROM BOUTIQUE INNER JOIN CONTAINSTABLE (BOUTIQUE, *, ' " & filtre & " ' , " & top_n_by_rank & " ) AS KEY_TBL " &_
  9.     "   ON BOUTIQUE.ID = KEY_TBL.[KEY] " &_
  10.     " UNION " &_
  11.     " SELECT ID as ID, convert(varchar, DATE_NEWS, 103) AS TITRE_ORI, TITRE AS TITRE_FR, U_LOGIN as U_LOGIN, 5 AS TYPE, KEY_TBL.RANK " &_
  12.     " FROM NEWS INNER JOIN CONTAINSTABLE (NEWS, *, ' " & filtre & " ' , " & top_n_by_rank & " ) AS KEY_TBL " &_
  13.     "   ON NEWS.ID = KEY_TBL.[KEY] " &_
  14.     " ) TMP ORDER BY TMP.TYPE, TMP.TITRE_FR"
  15. function getFiltreFromKeyWord(keyword, style)
  16. dim mots, tmpstr, errs
  17. if style = "CONTAINS" then
  18.  mots = split(keyword, " " )
  19.  i = 0
  20.  errs = 0
  21.  tmpstr = ""
  22.  do while not i > ubound(mots)
  23.   if len(cleanString2(mots(i))) > 2 then
  24.    if tmpstr <> "" then
  25.     tmpstr = tmpstr & " AND " & getSearchPattern(mots(i))
  26.    else
  27.     tmpstr = tmpstr & getSearchPattern(mots(i))
  28.    end if
  29.   else
  30.    errs = errs + 1
  31.   end if
  32.   i = i + 1
  33.  loop
  34.  if errs = ubound(mots) + 1 then
  35.   getFiltreFromKeyWord = "( ""Nouveau"" ) AND ( ""système"" )  AND ( ""recherche"" )"
  36.  else
  37.   getFiltreFromKeyWord = tmpstr
  38.  end if
  39. else
  40.  getFiltreFromKeyWord = cleanString2(keyword)
  41. end if
  42. end function
  43. function getSearchPattern(keyword)
  44. dim tmpstr
  45. if left(keyword, 1) = "!" then
  46.  tmpstr = "NOT "
  47.  keyword = right(keyword, len(keyword) - 1)
  48. end if
  49. if right(keyword, 1) = "+" then
  50.  keyword = left(keyword, len(keyword) - 1)
  51.  tmpstr = tmpstr & "FORMSOF (INFLECTIONAL, " & cleanString2(keyword) & " )"
  52. elseif right(keyword, 1) = "*" then
  53.  tmpstr = tmpstr & "( """ & cleanString2(keyword) & "*"" )"
  54. else
  55.  tmpstr = tmpstr & "( """ & cleanString2(keyword) & """ )"
  56. end if
  57. getSearchPattern = tmpstr
  58. end function
  59. function cleanString2(str)
  60. dim regExp
  61. set regExp = new regExp
  62. regExp.Pattern = "[^A-Za-z0-9_ ']"
  63. regExp.Global = true
  64. regExp.IgnoreCase = true
  65. cleanString2 = regExp.replace(str, "" )
  66. end function


 
=> Je récupère la requête demandée par l'utlisateur, et avec des fonctions en interne, je vais parser sa demande avec une grammaire qui est propre au site, pour ensuite lancer manuellement ma recherche avec les critères que j'ai décidé en fonction de ce que j'ai compris de la requête de l'utilisateur.


Message édité par Arjuna le 24-11-2004 à 15:41:24
Reply

Marsh Posté le 24-11-2004 à 15:41:44    

Sebastien a écrit :

mnogosearch, the best :-)


Je regarde :)

Reply

Marsh Posté le 24-11-2004 à 15:41:44   

Reply

Marsh Posté le 24-11-2004 à 15:44:15    

OK, a m'a l'air pas mal. Payant par contre... Vais voir le prix (à la base, si je demande pour PHP/Linux, c'est pour des clients qui ne veulent pas payer pour leur serveur ;))
 
Euh... :??:
 
Mais :??:
 
Ca marche que sous Windows ???
Ben oui mais non, à ce moment on utilise Index Server, ça marche très bien et ça a l'avantage de pas coûter un centime de plus que la licence Windows ;)
 
-- Edit : Ah non, j'ai rien dit, dans la page "download" il y a une version Unix qui est gratuite :) --


Message édité par Arjuna le 24-11-2004 à 15:48:10
Reply

Marsh Posté le 24-11-2004 à 15:50:05    

Arjuna > c'est de l'opensource, rien ne t'empeche de l'implementer.  
http://fr.php.net/manual/fr/function.soundex.php


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 24-11-2004 à 15:50:22    

Oui voila c payant pour windows tout comme mysql normalement, mais pour unix (testé et approuve sous debian) c'est gratuit.

Reply

Marsh Posté le 24-11-2004 à 15:52:20    

simogeo a écrit :

Arjuna > c'est de l'opensource, rien ne t'empeche de l'implementer.  
http://fr.php.net/manual/fr/function.soundex.php


Mouais. En effet, c'est à voir. Cela dit, soundex ne fait pas tout, j'ai surtout besoin de fuzzy (orthographe légèrement variable, prononciation comprise)
 
Cela dit, je ne vous pas trop comment faire bouffer 'H416' au moteur de recherche et lui faire comprendre que c'est "Hilbert" que je recherche :??:


Message édité par Arjuna le 24-11-2004 à 15:54:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed