Christian Kruse: Suche

Beitrag lesen

Hallo TS,

Ist das jetzt ein Bug oder ein Feature?

Weder, noch. Eine technische Limitierung. Photos ist kein deutsches Wort und kann deshalb nicht korrekt auf seine Grundform zurück geführt werden (Stichwort Stemming).

Da wir hier zwar regelmäßig Rechtschreibung üben, uns aber auch gerne immer wieder vertippen, wäre es mMn doch zumindest sinnvoll, auch einen Teilstring (also "Photo" in "Photos") als Treffer zu erzeugen?

So einfach ist das nicht. Für eine einfache Substring-Suche ist die Datenmenge viel zu groß, eine Suche nach einem Substring muss bekanntermaßen einen full table scan machen. Deshalb wird hier die full text search von PostgreSQL benutzt. Die führt Wörter zurück auf den Wortstamm. Das heisst aber auch, dass nur der exakte Match gesucht werden kann, wenn ein Wort nicht im Dictionary vorhanden ist. Mal ein Beispiel: Bei der Suche wie kann ich zwei frames ändern folgende Query erzeugt:

cforum_development=# select to_tsquery('german', 'wie & kann & ich & zwei & frames & ändern');
       to_tsquery
-------------------------
 'zwei' & 'fram' & 'and'
(1 row)

Das ist etwas vereinfacht, aber im wesentlichen stimmt es. Bei dem Suchbegriff stock photos wird diese Query erzeugt:

cforum_development=# select to_tsquery('german', 'stock & photos');
     to_tsquery
--------------------
 'stock' & 'photos'
(1 row)

Der Stemming-Algorithmus kann also offensichtlich photos nicht zurückführen; wähle ich Englisch aus geht es viel besser:

cforum_development=# select to_tsquery('english', 'stock & photos');
    to_tsquery
-------------------
 'stock' & 'photo'
(1 row)

Das führt aber bei mehrheitlich deutschen Begriffen zu Problemen:

cforum_development=# select to_tsquery('english', 'wie & kann & ich & zwei & frames & ändern');
                      to_tsquery
------------------------------------------------------
 'wie' & 'kann' & 'ich' & 'zwei' & 'frame' & 'ändern'
(1 row)

Da wir hier aber hauptsächlich Deutsch schreiben (bis auf die Fachbegriffe, die aber in der Mehrheit korrekt eingegeben werden), ist die Abwägung klar auf das deutsche Dictionary gefallen.

Edit: wenn das allerdings nicht reicht indiziert Google das Forum hier sehr schnell und gut: https://www.google.de/search?q=stock+photos+site%3Aforum.selfhtml.org

LG,
CK