如何在数据库中存储文章或其他大型文本

Etz*_*tet 43 xml database

我目前正在设计自己的数据库驱动网站.主要原因是为了学习目的,但我不会撒谎,包括少量的虚荣心!

虽然我相信到目前为止我的数据库设计还不错,但我仍然不能完全确定存储文章或其他大型文本的最佳方式.我知道大多数DBMS都有TEXT数据类型或等价的,可以容纳大量的文本.但是,将完整的文章存储为一个长字符串会导致阅读不愉快,因此需要进行格式化.

我是否将文章文本与所有HTML或BBcode标记一起存储 - 或者更简单的方法是在HTML或XML文档中创建页面并将该文件的路径存储在数据库中?

我非常喜欢将文章存储为XML文档的想法,因为我可以使用自定义标记轻松标记文章,并使用PHP的XML和XSLT函数将XML转换为HTML [或实际上,任何其他格式].它还允许作者指定何时创建行/分页符.这种方法当然需要额外的编码[我不害怕],但它确实存在使文章可搜索的问题.

我知道MySQL,例如,具有SQL语法,用于在文本字段中保存的字符串中搜索特定的术语/短语.如果我要将文本存储在单独的文件中,我如何才能使这些文章可搜索?

关于这么简单的问题,我在这里写了很多,所以我将其分解:

1:是否存在直接在数据库中存储大量格式化文本的"最佳"方式或
2:以HTML/XML/Whatever文件的形式保存到该文本的路径更好.

如果2,是否有一种优雅的方式使文本可搜索?

感谢您的时间 :)

Byr*_*ock 21

正如Alex建议的那样,将其存储在一个大文本字段中.要进行搜索,请不要敲打数据库,使用Lucenehtdig创建输出索引.这种方式搜索速度非常快.副作用是让您的搜索更加友好; 你拿你的关键字字段(建议使用反斜杠)并将它们粘贴在元关键字属性中.

编辑

除非您只搜索关键字,否则让数据库进行搜索的速度非常慢(曾经搜索过一个论坛,它需要FOREVER?).数据库无法索引a

  select.. where FULLTEXTFIELD like '%cookies%'.  
Run Code Online (Sandbox Code Playgroud)

寻找文章令人沮丧,搜索不会返回您正在寻找的结果,因为它们不在关键字字段中!Htdig允许您有效地搜索文章的全文.您的搜索将立即返回,文章中的每个术语都可以完全搜索.将关键字放在元标记中会使搜索结果页面上的搜索结果更高.

另一个好处是模糊匹配.如果您搜索"激活",htdigg将匹配具有活动,激活,活动等的页面(可配置).或者,如果用户拼错了单词,它仍将匹配.您希望您的用户拥有类似Google的体验,而不是令人讨厌的体验.:)

您需要一个脚本来创建指向您数据库中所有页面的链接列表.让htdig自动抓取这个,你再也不用考虑了.

此外,htdig还将抓取您的非数据库页面,以便您可以通过相同的简单界面搜索整个站点.

对于关键字字段,您应该有一个名为keywords的单独表,其中包含文章的ID和关键字字段(每行1个关键字).但是为了简单起见,在db中使用单个字段并不是一个糟糕的想法,如果将其放在表单中,它会使关键字更新变得非常简单.

如果您不想大惊小怪,可以尝试使用 Google自定义搜索.它的工作要少得多,但您无法保证所有页面都会被编入索引.

祝好运!


bac*_*h17 9

创建TEXT,BIGTEXT,LONGTEXT和其他数据类型字段是为了存储大量文本(64 KB到4 GB,具体取决于RDBMS).它们只是创建一个二进制指针来定位数据库中的文本,而不是直接存储在表中.如果在varchar字段中存储路径以查找文档,则几乎相同的过程,但在数据库中将其放在一起会使维护更容易,因为如果删除该行,文档将随之消失,而无需在其他过程中将其删除(就像你存储为文件一样).从逻辑上讲,这会使您的数据库更大,有时候不那么容易备份和传输,但是逐个传输文档会很繁琐而且速度很慢.

如您所见,它取决于数据库中的文档和行数.

对于搜索过程,我建议您创建一个新的"关键字"字段,以加快搜索速度.您也可以搜索文档的前n个字符,将它们作为CHAR或VARCHAR进行搜索,如果它们还没有特定字段,则将标题和副标题定位到这些数量.