【问题标题】:MySQL fulltext search for html entitiesMySQL全文搜索html实体
【发布时间】:2009-09-21 09:53:03
【问题描述】:

我必须破解内容管理系统以支持全文搜索包含特殊字符的语言。这些以 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”)也会导致类似的结果。

here 描述了同样的问题。

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

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

谢谢!
崩溃

【问题讨论】:

    标签: mysql full-text-search special-characters


    【解决方案1】:

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

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

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

    【讨论】:

    • 嘿,添加引号的提示有效!即使存在 & 符号。顺便说一句:我正在使用 MySQL 版本 5.0.51a
    【解决方案2】:

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

    【讨论】:

    • 抱歉,我不会为了让 CMS 使用特殊字符而重新实现整个搜索引擎。
    猜你喜欢
    • 2011-04-04
    • 2021-10-24
    • 1970-01-01
    • 2010-10-22
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多