1

我必须破解一个内容管理系统来支持全文搜索包含特殊字符的语言。这些以 html 实体的形式存储在数据库中。开箱即用,CMS 不支持它。该错误是很久以前报告的,但显然它没有优先级。我坚持使用这个 CMS,客户正在等待我的解决方案,所以我必须破解它。该死...

好的... CMS 通过将特殊字符转换为 html 实体来存储其内容(这实际上是由捆绑的编辑器完成的)。所以德语单词“möchten”在数据库中得到“möchten”。CMS 创建一个查询字符串,例如

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

该表的类型为 MyISAM,该字段具有 FULLTEXT 索引。

如果您使用“möchten”作为搜索字符串,MySQL 将匹配每个页面,因为 & 是一个运算符,如果它出现在搜索字符串中,它会做一些疯狂的事情。搜索将不起作用。

下一个想法是用 * 替换特殊字符作为占位符。但这也将匹配几个单词,只要你有任何以“m”开头的单词和另一个以“chten”结尾的单词。我不知道为什么,但只用星号替换与号(因此搜索“m*ouml;chten”)也会导致类似的结果。

这里描述了同样的问题。

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

编辑:无法将内容转换为 UTF-8。

谢谢!
崩溃

4

2 回答 2

1

为什么要使用 html 实体?只需切换到utf8。

否则,请尝试再次引用您的搜索字符串,例如 ('"search"')。 不幸的是不起作用 - http://bugs.mysql.com/bug.php?id=26265有一个长期悬而未决的错误。我想唯一的方法是:

最后一种方法是存储额外的列,仅用于搜索目的,所有重音都被替换。

于 2009-09-21T10:01:31.317 回答
0

您可以使用全文搜索引擎。Apache Lucene功能强大,但有点难学。Apache Solr更容易学习,而且非常有用。Sphinx以其与 MySQL 的轻松集成而闻名。我相信他们都很好地处理了国际化。

于 2009-09-21T10:04:09.610 回答