Suchfunktion (fulltext nativ) - Umlaute und G/K-Schreibung

Fragen zur Bedienung von phpBB 3.0.x, Probleme bei der Benutzung und alle weiteren Fragen inkl. Update auf die neuste phpBB 3.0.14 Version
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
barra
Mitglied
Beiträge: 1
Registriert: 14.10.2011 05:58

Suchfunktion (fulltext nativ) - Umlaute und G/K-Schreibung

Beitrag von barra »

Hallo,

folgende Ausgangsitation: Frisch installiertes PHPBB3. Die Suchfunktion ist auf fulltext nativ eingestellt. Ein Forum mit einem Thread und einer Antwort:

[Thread 1]Test
ÜBUNG macht den Meister.
---------------------------------
[Antwort]Re: Test
übung macht den Meister.


Versuch A: Gibt man nun den Suchbegriff Übung ein erhält man:
Die Suche ergab 1 Treffer: übung

Man beachte, dass das Wort nun kleingeschrieben ist. Auch in dem HTML-Text-Input-Feld der Suche steht nun übung. Als Treffer wird präsentiert:
Test
ÜBUNG macht den Meister.
Versuch B: Gibt man den Suchbegriff übung ein erhält man:
Die Suche ergab 1 Treffer: uebung

Aus dem kleinen Umlaut ü wurde ein ue. Auch in dem HTML-Text-Input-Feld der Suche steht nun uebung. Als Treffer wird präsentiert:
Re: Test
übung macht den Meister.
Schaut man sich dazu die Tabelle phpbb_search_wordlist an sieht man auch, dass das Wort Übung in verschiedenen Ausführungen indiziert wurde:

Code: Alles auswählen

word_id   word_text   word_common  word_count
1         übung       0            1
2         macht       0            2
3         den         0            2
4         meister     0            2
5         test        0            2
6         uebung      0            1
Was man doch erwarten würde wären 2 Treffer, egal wie man Übung nun schreibt? Und das Übung in der Wortliste nur einmal auftaucht.
Ist das Verhalten von PHPBB korrekt?

Stellt man die Suche auf fulltext mysql um, erhält man 2 Treffer - egal wie man Übung schreibt.
Die entsprechende SQL-Abfrage sieht folgender Maßen aus:

Code: Alles auswählen

SELECT SQL_CALC_FOUND_ROWS p.post_id FROM phpbb_posts p WHERE MATCH (p.post_subject, p.post_text) AGAINST ('+Übung ' IN BOOLEAN MODE) AND p.post_approved = 1 ORDER BY p.post_time DESC
Da das Feld post_text in der Tabelle phpbb_posts hat die Collation utf8_unicode_ci hat und nicht utf8_bin, wird bei dieser Abfrage nicht zwischen Groß- und Kleinschreibung unterschieden.
(siehe auch: http://dev.mysql.com/doc/refman/5.1/de/ ... earch.html)

In der Datei search.php findet man folgende Zeile (bei mir Zeile 297):

Code: Alles auswählen

$correct_query = $search->split_keywords($keywords, $search_terms);
Je nach dem welche Suchengine eingestellt ist wird die eine oder andere Funktion "split_keywords" benutzt.

Kleine Debuginfos zur Nativen Suche:
($keywords schnappt sich die GET-Variable: $keywords= utf8_normalize_nfc(request_var('keywords', '', true));)

Code: Alles auswählen

Suchbegriff: Übung
URL: http://localhost/phpbb3_test/search.php?keywords=Übung
$keywords : Übung
$search->search_query : übung (nach Aufruf von split_keywords)
SQL: SELECT word_id, word_text, word_common FROM phpbb_search_wordlist WHERE word_text = 'übung' ORDER BY word_count ASC
-------------------------------------------------------------------------------------
Suchbegriff: übung
URL: http://localhost/phpbb3_test/search.php?keywords=übung
$keywords : übung
$search->search_query : uebung (nach Aufruf von split_keywords bzw. cleanup)
SELECT word_id, word_text, word_common FROM phpbb_search_wordlist WHERE word_text = 'uebung' ORDER BY word_count ASC
Und zur Fulltext Suche:

Code: Alles auswählen

Suchbegriff: Übung
URL: http://localhost/phpbb3_test/search.php?keywords=Übung
$keywords : Übung
$search->search_query : +Übung (nach Aufruf von split_keywords)
-------------------------------------------------------------------------------------
Suchbegriff: übung
URL: http://localhost/phpbb3_test/search.php?keywords=übung
$keywords : übung
$search->search_query : +übung (nach Aufruf von split_keywords bzw. cleanup)
Also wird eindeutig durch die implementierung in der Funktion split_keywords bzw. cleanup in der Klasse fulltext_native in der Datei includes/search/fulltext_native.php der Suchebegriff verändert, nicht etwa durch die URL/Browser. Da die beiden Funktionen auch für die Indizierung genommen werden, entstehen die Unterschiedlichen Wörter in der Wortliste (phpbb_search_wordlist).

Also nochmal gefragt: Sollte PHPBB nicht korrekterweise ÜBUNG und übung als ein Wort indizieren?
Oder liegt es an meinen Einstellungen/System?

Infos zum System:
  • Windows 7 64Bit
  • PHPBB 3.0.9
  • PHP Version 5.2.11 (Apache 2.0 Handler)
  • MySQL 5.1.44-community-log
  • Firefox 7.0.1
Danke und Grüße
barra
Antworten

Zurück zu „[3.0.x] Administration, Benutzung und Betrieb“