Когда я пытаюсь выполнить поиск по-китайски на своём форуме, результаты поиска возвращают разорванные предложения: отсутствует пунктуация, между словами появляются неожиданные пробелы, а некоторые слова исчезают.
Например, я попытался найти 管理员, исходное предложение было таким:
Как видно, отсутствует 可见的, также нет точки 。, из-за чего предложение разорвано. Кроме того, пропущены 只有, и, 才能. Между словами появляются неожиданные пробелы.
Может кто-нибудь помочь решить эту проблему? Спасибо.
Да, поиск всё ещё работает, просто отображаемый фрагмент не совсем идеален. Для китайского языка поиск обрабатывается немного иначе. Вместо того чтобы игнорировать стоп-слова непосредственно в поисковом запросе, мы полностью исключаем их из поисковых данных.
Стоп-слова определяются с использованием GitHub - yanyiwu/cppjieba: "结巴"中文分词的C++版本 · GitHub. В связи с недавними изменениями в отображении фрагментов поиска, мы должны просто удалить следующую строку, так как она искажает фактические данные поиска.
В любом случае, наша поддержка поиска для китайского языка оставляет желать лучшего, но есть расширения для PostgreSQL, которые мы могли бы рассмотреть, чтобы обеспечить корректную поддержку языков, не имеющих нативной поддержки. Возможно, https://pgroonga.github.io/?
PostgreSQL поддерживает полнотекстовый поиск только для языков, использующих только буквы латинского алфавита и цифры. Это означает, что PostgreSQL не поддерживает полнотекстовый поиск для японского, китайского и других подобных языков. Установив PGroonga в ваш PostgreSQL, вы сможете использовать сверхбыструю функцию полнотекстового поиска для всех языков!
Извините, что не был более конкретен ранее. Если мы действительно хотим исправить это сейчас, нам нужно убедиться, что мы не удаляем стоп-слова для китайского языка в данных поиска, при этом сохраняя удаление стоп-слов, когда они используются в качестве поискового запроса.
В таблице PostSearchData хранятся два столбца: #search_data используется при запросах по поисковым терминам, а #raw_data — при отображении поискового фрагмента. Исправление должно заключаться в том, чтобы стоп-слова китайского языка не удалялись из #raw_data, но при этом удалялись из #search_data.