Hallo,
hab folgendes Problem:
Ich möchte eine Volltextsuche haben. Das ganze soll auch mit möglichst vielen Datensätzen noch reibungslos funktionieren. Um nun die Wörter meiner Artikel zu indizieren habe ich folgendes versucht:
//Artikel abfragen
$sql = "SELECT a.id AS aid, b.id, 'article' AS type,
CONCAT(a.title, ' ', a.text, ' ', a.category) AS search_data
FROM article AS a
LEFT JOIN search_time AS b
ON b.aid = a.id
AND FIND_IN_SET('article', b.type)
WHERE FIND_IN_SET('1', a.indexing)
AND (b.id IS NULL OR a.date > b.date)
ORDER BY a.date";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
Die Tabellen dazu:
article
id | date | indexing | title | text | category
----------------------------------------------
/\
gibt an ob der Artikel indiziert werden soll oder nicht mit Hilfe von 0 und 1!
search_time:
id | type | aid | date
----------------------
/\
Artikel-id
Die Abfrage funktioniert soweit!
Dann möchte ich Stoppwörter einlesen. Das ganze hab ich so realisiert:
function getStopwords()
{
include("".$_SERVER['DOCUMENT_ROOT']."/ordner/stopwords-de.php");
}
in der inkludierten datei steht:
$stopwords[] = "aber";
$stopwords[] = "alle";
//usw.
Das sollte auch nicht das Problem sein.
Nun sollen die Suchergebnisse (search_data) noch angepasst werden und zwar so:
function extractWords($search_data)
{
$search = array();
$search[] = "sonderzeichen";
$replace = array();
$replace[] = "alternative";
$search_data = trim(strtolower(stripslashes(strip_tags($search_data))));
//Entfernt Backslashes, Leerzeichen etc.
$search_data = preg_replace($search, $replace, $search_data);
//Ersetzt die Sonderzeichen des Arrays "search" mit den Alternativen des Arrays "replace"
$search = array();
$search[] = "=(\s[A-Za-z]{1,2})\s=";
$search[] = "= " . implode(" | ", getStopwords()) . " =i"; //soll stoppwörter entfernen...
$search[] = "= +=";
$replace = array();
$replace[] = " ";
$replace[] = " ";
$replace[] = " ";
$search_data = " ".str_replace(" ", " ", $search_data)." ";
$search_data = trim(preg_replace($search, $replace, $search_data));
}
...leider funktioniert das mit den Stoppwörtern so nicht. Wir könnte ich die da einbinden?!
Und wie kann ich dann die Suchergebnisse ausgeben?
Lg, Jens