Hallo Andreas,
ft_parser.c, Zeile 115:
#ifdef HYPHEN_IS_DELIM
#define word_char(X) (isalnum(X) || (X)=='_' || (X)==''')
#else
#define word_char(X) (isalnum(X) || (X)=='_' || (X)==''' || (X)=='-')
#endifAber das ist doch auskommentiert,
Auskommentiert? *lol* Eine Raute (#) ist in C kein Kommentar.
Damit faengt eine Preprozessor-Direktive an. C ist eben doch
nicht PHP oder Perl ;)
da muß es doch noch was anders geben, oder?
Die komplette Parser-Arbeit findet in diesem Stueck Code
statt:
while (doc<end)
{
for (;doc<end;doc++)
if (word_char(*doc)) break;
for (w.pos=doc; doc<end; doc++)
if (!word_char(*doc)) break;
if ((w.len= (uint) (doc-w.pos)) < MIN_WORD_LEN) continue;
if (w.len >= HA_FT_MAXLEN) continue;
if (is_stopword(w.pos, w.len)) continue;
if (!tree_insert(wtree, &w, 0))
{
delete_tree(wtree);
my_free((char*) wtree,MYF(0));
return NULL;
}
}
Wie du siehst, wird hier erst nach einem Wort-Anfang (erste
for-Schleife) gesucht, danach nach dem Wort-Ende (zweite
for-Schleife). Danach wird geprueft, ob die Wort-Laenge
kleiner als die minimale Wortlaenge ist. Schliesslich wird
geschaut, ob es ein Stopwort ist. Danach wird das Wort in
den Baum eingefuegt.
Und ist diese Prüfung nicht etwas zu simpel um die Wörter
für den Volltext-Index zu trennen?
Nein, warum?
Das hieße ja Wörter nur durch durch '_', '' und Zahlen
getrennt werden, oder?
Nee, ganz und gar nicht. Das heisst, Woerter werden durch
*alle* Zeichen ausser a-zA-Z0-9_' und optional noch -
getrennt.
Es muß ja mindestens auch durch Leerzeichen getrennt
werden,
Leerzeichen ist nicht in a-zA-Z0-9_' enthalten.
und Michael hat mir mal geschrieben, dass sogar '(' beim
Suchen nicht beachtet würden, also dass auch bei diesen
Zeichen getrennt werden müßte.
Auch ( und ) sind nicht in der Zeichenmenge enthalten.
PS: Wieso beschwert sich das Forum ich hätte "mehr als 50%
zitierte Zeilen" in meinem Posting?
Weil du nur 2 oder 3 Zeilen im Vergleich zu 7 geschrieben
hast? :)
Gruesse,
CK