Moteur de recherche interne pour un portail

ViPHP
ViPHP | 4039 Messages

25 juin 2009, 18:39

Tout dépends. Le forum de phpfrance utilise PhpBB et tout ce qu'il propose. Mais qu'en est t'il de ton portail ? Est-ce un ensemble complet que tu as installé, ou est-ce que tu as tout programmé à la main ?

Dans le premier cas, peut-être qu'un moteur de recherche est déjà installé. S'il ne l'est pas, ça peut être assez contraignant que de lui greffer un.

Dans le second cas, il suffit de prévoir les éléments nécessaires au fonctionnement de ton interface de recherche.

Par exemple, en dehors de tout ce que tu as déjà comme contenu (je prends ici l'exemple d'articles, mais je ne sais pas quel type de contenu tu proposes), tu pourrais rajouter une table telle que celle-ci:

Code : Tout sélectionner

table_recherche ************************ * id (int) * txt (text)* ************************
Dans laquelle l'identifiant correspondra à un contenu dans ta base de données, et le texte à une version "standardisée" du contenu en question, sur laquelle tu effectueras ensuite tes recherches. Ces recherches donneront une liste d'identifiant (avec éventuellement leurs scores), avec lesquels tu pourras rechercher les articles en question et proposer les liens vers ses articles dans ta page de résultat.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Fredy07
Invité n'ayant pas de compte PHPfrance

26 juin 2009, 02:29

Merci Berzemus pour la reponse, je te donne une idee sur le portail:

1- Je le programme a la main,
2- Il contient des dizaines de tables, les tables sont comme suite:

table1
id
text
url

table2
id
id_table1
text
url


Quand je fais la recherche sur les 2 tables par exemple, je trouve que le nombre de resultats est double, c'est pour cela que je pose ma question

ViPHP
ViPHP | 4039 Messages

26 juin 2009, 09:46

Ca dépend de ce qu'il y à dans les tables. Toutes tes tables contiennent du texte ? C'est quand même bizarre ça, et ça traduirait presque un défaut de conception.

Tu sais donner un aperçu plus détaillé de ta structure, et peut-être expliquer à quoi servent les tables ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Fredy07
Invité n'ayant pas de compte PHPfrance

27 juin 2009, 02:46

voila le code complet:
<?php
//

$word = 'php';

//echo $word.'<br>';
$query = "select * from recherche1, recherche2 where recherche1.texte1 LIKE '%$word%' OR recherche2.texte2 LIKE '%$word%'";

echo $query.'<br>';

$result = mysql_query ($query) or die (mysql_error());

$total = mysql_num_rows($result);

echo $total.'<br>';
if ($total) {
	
	while ($row = mysql_fetch_array($result)) {
		
		$texte1 = $row['texte1'];
		$texte2 = $row['texte2'];
		$url1 = $row['url1'];
		$url2 = $row['url2'];
		$titre1 = $row['titre1'];
		$titre2 = $row['titre2'];
		
		echo 'voila le texte1'.$texte1.' et voila son url: '.$url1.' et le titre '.$titre1.'<br>';
		echo 'voila le texte1'.$texte2.' et voila son url: '.$url2.' et le titre '.$titre2.'<br>';
			
			}
		
		
		//echo 'voila url' .$url.'<br>';
		//echo 'voila le texte'.$text.'<br>';
		}
		

else
{
	echo 'aucun resultat';
}

//
?>
et le code des 2 tables recherche1 et recherche2:


--
-- Table structure for table `recherche1`
--

CREATE TABLE IF NOT EXISTS `recherche1` (
  `id1` int(2) NOT NULL auto_increment,
  `titre1` varchar(20) collate latin1_general_ci NOT NULL,
  `texte1` longtext collate latin1_general_ci NOT NULL,
  `url1` varchar(30) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id1`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;

--
-- Dumping data for table `recherche1`
--

INSERT INTO `recherche1` (`id1`, `titre1`, `texte1`, `url1`) VALUES
(1, 'titre 1 de recherche', 'c''est la premiere fois que je code du php', 'code.php'),
(2, 'titre 2 recherche 1', 'j''adore coder du php', 'code1.php');

-- --------------------------------------------------------

--
-- Table structure for table `recherche2`
--

CREATE TABLE IF NOT EXISTS `recherche2` (
  `id2` int(2) NOT NULL auto_increment,
  `titre2` varchar(20) collate latin1_general_ci NOT NULL,
  `texte2` longtext collate latin1_general_ci NOT NULL,
  `url2` varchar(30) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id2`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;

--
-- Dumping data for table `recherche2`
--

INSERT INTO `recherche2` (`id2`, `titre2`, `texte2`, `url2`) VALUES
(1, 'titre 1 de recherche', 'c''est la premiere fois que je code du php2', 'code2.php'),
(2, 'titre 2 recherche2', 'j''adore coder du php2', 'code3.php');
et les resultats sont comme suite:
select * from recherche1, recherche2 where recherche1.texte1 LIKE '%php%' OR recherche2.texte2 LIKE '%php%'
4
voila le texte1c'est la premiere fois que je code du php et voila son url: code.php et le titre titre 1 de recherche
voila le texte1c'est la premiere fois que je code du php2 et voila son url: code2.php et le titre titre 1 de recherche
voila le texte1j'adore coder du php et voila son url: code1.php et le titre titre 2 recherche 1
voila le texte1c'est la premiere fois que je code du php2 et voila son url: code2.php et le titre titre 1 de recherche
voila le texte1c'est la premiere fois que je code du php et voila son url: code.php et le titre titre 1 de recherche
voila le texte1j'adore coder du php2 et voila son url: code3.php et le titre titre 2 recherche2
voila le texte1j'adore coder du php et voila son url: code1.php et le titre titre 2 recherche 1
voila le texte1j'adore coder du php2 et voila son url: code3.php et le titre titre 2 recherche2