Chinesische Suchergebnisse sind fehlerhaft

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.

Kann mir jemand bei diesem Problem helfen? Danke.

2 „Gefällt mir“

Es scheint, als würden diese fehlenden Zeichen im Chinesischen als Stoppwörter betrachtet.

(byebug) data = CppjiebaRb.segment(search_data, mode: mode)
["Verwaltungspersonal", "sichtbar", "der", "Kategorie", "。", "nur", "Administrator", "und", "Forenmoderator", "können", "durchsuchen", "Thema"]
(byebug) CppjiebaRb.filter_stop_word(data)
["Verwaltungspersonal", "Kategorie", "Administrator", "Forenmoderator", "durchsuchen", "Thema"]
3 „Gefällt mir“

Warte, also ist der Fehler hier, dass die „Zusammenfassung

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.

3 „Gefällt mir“

Danke, dass du dir das angesehen hast.

Das ist kein Stoppwort im Chinesischen, sondern ein Adjektiv, das „sichtbar

1 „Gefällt mir“

Stoppwörter sind Wörter, die sehr häufig vorkommen und die Suchleistung beeinträchtigen.

„And

2 „Gefällt mir“

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/?

5 „Gefällt mir“

Danke! Ich probiere das aus und schaue, wie es läuft.

@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!

@tgxworld Ich habe einen PR erstellt, wie du vorgeschlagen hast: FIX: keep chinese stopwords on search by t0t07 · Pull Request #11530 · discourse/discourse · GitHub

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.

3 „Gefällt mir“

Übrigens @riking, nur zur Bestätigung: Setzt Discourse derzeit die Volltextsuche mit den integrierten PostgreSQL-Funktionen um, wie in discourse/lib/search.rb at 1cf057fb1c4e168ce441ddde918636725abeb668 · discourse/discourse · GitHub gezeigt?

Ist das korrekt?

1 „Gefällt mir“

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.

1 „Gefällt mir“

@tgxworld Ich verstehe den Unterschied zwischen Suchdaten und Suchanfrage nicht. Könntest du bitte weitere Details liefern? Danke.

Wenn wir Stoppwörter in den Index aufnehmen, wird der Index aufgebläht und die Suchleistung verschlechtert sich.

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.

Gibt es Fortschritte bei diesem Fehler?

Ich dachte, ich hätte hier einige Änderungen vorgenommen:

Ist deine Spracheinstellung auf zh_TW, zh_CN oder ja gesetzt? Falls nicht, ist search_tokenize_chinese_japanese_korean auf true eingestellt?

Wir haben hier eine Umgehung:

2 „Gefällt mir“