Quando tento pesquisar em chinês no meu fórum, vejo que o resultado da pesquisa retorna frases quebradas, a pontuação está faltando e há espaços em branco inesperados entre as palavras, além de algumas palavras ausentes.
Por exemplo, tentei pesquisar 管理员, e a frase original é:
管理人员可见的分类。只有管理员和版主才能阅览主题
Mas o que vi no resultado da pesquisa ficou assim:
Como podem ver, 可见的 está faltando, o ponto final 。 também está ausente, o que quebra a frase. Além disso, 只有 e 和, assim como 才能, também não aparecem. E há espaços em branco inesperados entre as palavras.
Sim, a pesquisa ainda está funcionando, apenas o trecho exibido não é ideal. Para o idioma chinês, a pesquisa é tratada de maneira um pouco diferente. Em vez de ignorar as palavras de parada durante a própria consulta de pesquisa, nós as excluímos completamente dos dados de pesquisa.
As palavras de parada são determinadas usando GitHub - yanyiwu/cppjieba: "结巴"中文分词的C++版本 · GitHub. Com as recentes mudanças na forma como os trechos de pesquisa são exibidos, devemos simplesmente remover a seguinte linha, pois ela interfere nos dados reais de pesquisa.
De qualquer forma, nosso suporte de pesquisa para o chinês não é ótimo, mas existem extensões do PostgreSQL que podemos considerar para que possamos dar suporte adequado a idiomas que não têm suporte nativo. Talvez https://pgroonga.github.io/?
O PostgreSQL oferece suporte à pesquisa de texto completo apenas para idiomas que usam apenas letras e dígitos. Isso significa que o PostgreSQL não oferece suporte à pesquisa de texto completo para japonês, chinês e assim por diante. Você pode usar o recurso de pesquisa de texto completo super rápido para todos os idiomas instalando o PGroonga no seu PostgreSQL!
Desculpe não ter sido mais específico anteriormente. Se realmente quisermos corrigir isso por enquanto, precisamos garantir que não removamos as palavras de parada em chinês dos dados de pesquisa, ao mesmo tempo em que garantimos que as palavras de parada ainda sejam removidas quando usadas como consulta de pesquisa.
Existem duas colunas que armazenamos na tabela PostSearchData: #search_data é usado ao consultar termos de pesquisa. #raw_data é o que usamos ao exibir o trecho da pesquisa. A correção aqui deve ser que as palavras de parada em chinês não sejam removidas do #raw_data, mas continuem sendo removidas do #search_data.