Wenn ich in meinem Forum auf Chinesisch suche, werden die Suchergebnisse mit unterbrochenen Sätzen zurückgegeben. Die Satzzeichen fehlen, es gibt unerwartete Leerzeichen zwischen den Wörtern, und einige Wörter fehlen.
Beispiel: Ich habe nach 管理员 gesucht. Der ursprüngliche Satz lautet:
管理人员可见的分类。只有管理员和版主才能阅览主题
Das, was ich in den Suchergebnissen sehe, sieht jedoch wie folgt aus:
Wie Sie sehen können, fehlt 可见的, und der Punkt 。 fehlt ebenfalls, was den Satz unterbricht. Außerdem fehlen 只有, 和 und 才能. Zudem gibt es unerwartete Leerzeichen dazwischen.
Ja, die Suche funktioniert noch, nur ist die angezeigte Zusammenfassung nicht ideal. Für die chinesische Sprache wird die Suche etwas anders gehandhabt. Anstatt Stoppwörter bei der Suchanfrage selbst zu ignorieren, schließen wir sie vollständig aus den Suchdaten aus.
Die Stoppwörter werden über GitHub - yanyiwu/cppjieba: "结巴"中文分词的C++版本 · GitHub ermittelt. Aufgrund der kürzlichen Änderungen an der Darstellung von Suchergebnissen sollten wir die folgende Zeile einfach entfernen, da sie die eigentlichen Suchdaten verfälscht.
Wie auch immer, unsere Suchunterstützung für Chinesisch ist nicht besonders gut, aber es gibt PG-Erweiterungen, die wir in Betracht ziehen könnten, um Sprachen ohne native Unterstützung ordnungsgemäß zu unterstützen. Vielleicht https://pgroonga.github.io/?
@tgxworld Ich bin mir nicht sicher, ob ich das richtig verstanden habe. PGroonga unterstützt weder Chinesisch noch Japanisch. Auf https://pgroonga.github.io/ heißt es:
PostgreSQL unterstützt die Volltextsuche nur für Sprachen, die ausschließlich Buchstaben und Ziffern verwenden. Das bedeutet, dass PostgreSQL keine Volltextsuche für Japanisch, Chinesisch und dergleichen unterstützt. Durch die Installation von PGroonga in Ihrer PostgreSQL-Datenbank können Sie jedoch eine extrem schnelle Volltextsuche für alle Sprachen nutzen!
Die Bedeutung ist genau das Gegenteil. Normaler PostgreSQL unterstützt weder Chinesisch noch Japanisch. PGroonga fügt die Unterstützung für diese Sprachen hinzu.
Entschuldige bitte, dass ich zu Beginn nicht genauer war. Wenn wir das Problem jetzt wirklich beheben wollen, müssen wir sicherstellen, dass wir Stoppwörter für das Chinesische in den Suchdaten nicht entfernen, während gleichzeitig gewährleistet bleibt, dass Stoppwörter weiterhin entfernt werden, wenn sie als Suchanfrage verwendet werden.
In der Tabelle PostSearchData speichern wir zwei Spalten: #search_data wird bei der Abfrage nach Suchbegriffen verwendet. #raw_data wird verwendet, wenn der Suchauszug angezeigt wird. Die Korrektur hier sollte darin bestehen, dass chinesische Stoppwörter nicht aus #raw_data entfernt werden, aber weiterhin aus #search_data entfernt werden.