我必须入侵一个内容管理系统,以支持满足包含特殊字符的语言的完整文本搜索。这些存储在数据库中作为HTML实体。开箱即用,CMS不支持它。该错误很久以前就报告了,但显然没有优先事项。我坚持使用此CMS,客户正在等待我的解决方案,因此我必须入侵它。该死...

好的... CMS通过将特殊字符转换为HTML实体(这是由捆绑编辑器完成的)来存储它的内容。因此,德语单词“Möchten”在DB中获得了“Möchten”。 CMS创建一个查询字符串,例如

SELECT * FROM `SiteTree` WHERE MATCH( Content ) AGAINST (<SEARCH_STRING> IN BOOLEAN MODE);

该表是Myisam类型的,该字段具有完整的索引。

如果您使用“möchten”作为搜索字符串,则MySQL将匹配每个页面,AS&是一个操作员,如果它存在于搜索字符串中,则会做疯狂的事情。搜索将行不通。

下一个想法是用 *作为占位符替换特殊角色。但这也将与几个单词匹配,一旦您有任何东西以“ M”开头,另一个以“ chten”结尾的单词。我不知道为什么,但是仅用星号替换andand(因此,搜索“ M*OUML; CHTEN”)也会导致类似的结果。

描述了同样的问题 这里.

好的,伙计们,我需要您的帮助!有任何想法吗?

编辑: 将内容转换为UTF-8是没有选项。

谢谢!
克雷什

有帮助吗?

解决方案

为什么您使用HTML实体?只需切换到UTF8即可。

否则,尝试再次引用您的搜索字符串('“ search”')。不幸的是无法正常工作 - http://bugs.mysql.com/bug.php?id=26265 有一个漫长的漏洞。我想唯一的方法是:

最后的方法是为搜索目的存储其他列,并更换所有口音。

其他提示

您可以使用全文搜索引擎。 Apache Lucene 强大,但很难学习。 Apache Solr 学习容易得多,并且非常有用。 狮身人面像 以与MySQL的简单集成而闻名。我相信他们所有人都很好地处理了国际化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top