Cuando intento buscar en chino en mi foro, veo que los resultados de búsqueda devuelven frases fragmentadas, faltan los signos de puntuación, hay espacios en blanco inesperados entre las palabras y algunas palabras desaparecen.
Por ejemplo, intenté buscar 管理员. La frase original es:
管理人员可见的分类。只有管理员和版主才能阅览主题
Pero lo que veo en los resultados de búsqueda se parece a esto:
Como pueden ver, 可见的 falta, también falta el punto 。, lo que rompe la frase. Además, 只有, 和 y 才能 también faltan. Y hay espacios en blanco inesperados en medio.
¿Alguien puede ayudarme con este problema? Gracias
Sí, la búsqueda sigue funcionando, pero el fragmento que se muestra no es ideal. Para el idioma chino, la búsqueda se maneja de manera un poco diferente. En lugar de ignorar las palabras vacías durante la consulta de búsqueda en sí, las excluimos por completo de los datos de búsqueda.
Las palabras vacías se determinan utilizando GitHub - yanyiwu/cppjieba: "结巴"中文分词的C++版本 · GitHub. Con los cambios recientes en la forma en que se muestran los fragmentos de búsqueda, deberíamos simplemente eliminar la siguiente línea, ya que interfiere con los datos reales de búsqueda.
De todos modos, nuestro soporte de búsqueda para el chino no es excelente, pero existen extensiones de PostgreSQL que podríamos considerar para poder soportar adecuadamente idiomas que no tienen soporte nativo. ¿Quizás https://pgroonga.github.io/?
PostgreSQL admite la búsqueda de texto completo en idiomas que solo usan letras y dígitos. Esto significa que PostgreSQL no admite la búsqueda de texto completo en japonés, chino, etc. ¡Puedes utilizar la función de búsqueda de texto completo ultrarrápida para todos los idiomas instalando PGroonga en tu PostgreSQL!
Perdona por no ser más específico al principio. Si realmente queremos solucionar esto por ahora, necesitamos asegurarnos de no eliminar las palabras vacías para el chino en los datos de búsqueda, al mismo tiempo que garantizamos que las palabras vacías sigan siendo eliminadas cuando se usan como consulta de búsqueda.
Hay dos columnas que almacenamos en la tabla PostSearchData: #search_data se utiliza al realizar consultas con términos de búsqueda. #raw_data es lo que usamos al mostrar el fragmento de búsqueda. La solución aquí debería ser que las palabras vacías en chino no se eliminen de #raw_data, aunque sí se sigan eliminando de #search_data.