php - 搜索 HTML 存储内容时忽略 HTML 字符 PHP/MySQL?

标签 php mysql search

我们在 MySQL 中存储 HTML 内容 block (它是在 CKeditor 中创建的格式化文本。Ckeidor 添加内联 CSS 样式来格式化文本)。我们将数据库存储在名为“page_content”的列中

我们想要一个允许用户搜索文本(仅)的搜索功能。然而,我们不希望搜索返回 HTML 字符,而这正是现在正在发生的事情。例如,如果我们搜索“字体”,我们不希望搜索结果返回具有 HTML 样式的页面 <font>

在从 MySQL 搜索 HTML 存储的内容时,有什么方法可以忽略 HTML/CSS 字符吗?

最佳答案

您是否考虑过为这些搜索设置单独的表格? MySQL's full text search仅适用于 MyISAM 表,因此您可能不想将全文搜索与重要数据混合使用(当然,除非您对外键和参照完整性有一些奇怪的厌恶)。

我过去使用的方法基本上是这样的:

  • 设置一个具有简单 (id, search_text) 结构的单独表。
    • id 与您正在搜索的内容的 id 匹配。
    • search_text 是您要搜索的所有内容(正文、标题、作者姓名...),它们融合成一个文本 block 。
  • 添加full text indexing在搜索表上。
  • 更新您的数据库更新过程以将适当的 search_text 字符串构造为纯文本;在这里您可以去除 HTML 并可能应用一些其他映射(例如将“A+”之类的内容扩展为全文搜索将找到的内容)。
  • 搜索时,您应用与可搜索数据相同的映射,然后在搜索表中查找匹配项。

这解决了您的 HTML 问题,让您可以轻松地搜索 HTML 内容之外的内容,并允许您通过重复对搜索文本的不同部分进行加权来调整搜索结果(例如,如果您希望标签比正文更重要文本,只需在构建 search_text 时将标签添加两到三次即可。

您必须处理文本以删除或忽略 HTML。这种方法让您只需执行一次,而不是在每次搜索时都执行。

关于php - 搜索 HTML 存储内容时忽略 HTML 字符 PHP/MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6590548/

相关文章:

php - 远程和本地之间的数据同步各有写入

php - CodeIgniter 2.1 国际化 i18n - 如果用户数据存在则覆盖默认语言

mysql - MySQL中SHOW INDEX、SHOW INDEXES和SHOW KEYS的区别

php - 无法将包含撇号的数据保存到 MySQL 数据库

检索每个分组 ID 的中值的 MySQL 中值查询

php - 如何在 mysql php 中立即获取所有可用行

php - Sql-server:触发器和最后插入的ID

java - 如何返回 ArrayList<Field> 的索引

C:在字典中搜索字符串

c# - Linq to Lucene 错误 : "Classes must define at least one field as a default search field"