Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 存储大型可搜索文本文件的最佳方法_Database_Search_Large Text_Large Data - Fatal编程技术网

Database 存储大型可搜索文本文件的最佳方法

Database 存储大型可搜索文本文件的最佳方法,database,search,large-text,large-data,Database,Search,Large Text,Large Data,我正在开发一个在线圣经搜索程序。《圣经》是一本相当大的书,在纯文本中占据了近5MB的空间。我计划在程序中实现一个API,同时允许其他网站包含自己的圣经搜索小部件和程序,而无需开发搜索查询或在自己的服务器上存储圣经 考虑到这一点,我希望最终会有一个适度的查询流通过程序。此外,对于那些不熟悉圣经的人,它有两种格式化文本的方法。它可以包含红色文本和斜体。我需要一种存储经文以及红字和斜体格式的方法,但允许搜索查询忽略格式 它还需要尽可能快和高效(内存和cpu使用)。只要可以忽略格式进行查询,就会考虑任何

我正在开发一个在线圣经搜索程序。《圣经》是一本相当大的书,在纯文本中占据了近5MB的空间。我计划在程序中实现一个API,同时允许其他网站包含自己的圣经搜索小部件和程序,而无需开发搜索查询或在自己的服务器上存储圣经

考虑到这一点,我希望最终会有一个适度的查询流通过程序。此外,对于那些不熟悉圣经的人,它有两种格式化文本的方法。它可以包含红色文本和斜体。我需要一种存储经文以及红字和斜体格式的方法,但允许搜索查询忽略格式

它还需要尽可能快和高效(内存和cpu使用)。只要可以忽略格式进行查询,就会考虑任何存储格式(MySQL、JSON或XML文本文件等)。文件大小和计数并不重要,所以把书甚至章节分成单独的文件对我来说是很好的


不过,还有一件更重要的事情需要记住,那就是我希望有某种形式的搜索方法,可以搜索多首诗。所以,约翰福音3:16,17,我们要寻求“惟有神差遣他的儿子,使他得永生”。谢谢你的建议

我不知道圣经有格式。它是用来干什么的?如果是这些诗句,我建议你把每一个诗句都存储在数据库中。在一个高度规范化的表格中,有一个包含书籍的表格、一个包含章节的表格和一个包含诗句的表格。每节诗由一个诗号和一个诗文组成

现在,我认为这些章节没有标题,所以它们实际上也只是一个数字。在这种情况下,将它们分开存储是很愚蠢的,所以你只需要一个书表和一个诗表,每个诗节都有一个章节号、一个诗节号和一个诗节文本。我认为那是纯文本,不是吗

如果这首诗是纯文本的,您可以将其存储在MySQL中并为其创建全文索引,从而轻松地使其可搜索。这样,您可以非常高效地搜索,甚至可以使用通配符等

如果这首诗有格式,你可以选择创建两列,一列是纯文本用于搜索,另一列是格式化文本用于显示,但我怀疑你是否需要这样做


PS:5MB的文本实际上什么都不是。如果你有一个专用的程序,你可以用一个字符串把它保存在内存中,然后使用
strpos
或类似的函数来查找文本。您使用的是什么语言、数据库和平台?

有许多不同的开源文档搜索引擎,它们正是为您所要做的事情而设计的。Solr、Elastic Search、Xapian、嗖嗖声、Haystack(为Django制作)等。在S.O.和其他网站上也有其他帖子讨论了使用一个与另一个的好处,但是您的需求非常简单,任何一个都非常好(如果您的项目启动,您可以轻松地用最小的努力进行扩展,这总是很好地了解)。看看他们的例子,看看哪一个看起来最直观——Solr可以说是最受欢迎的,也是我唯一使用过的,但弹性搜索使用的是同样流行的Lucene后端,显然更容易启动和运行,所以我从这里开始

至于实际实现,如果要返回的是单个韵文(或仅仅是韵文编号),则需要将每个韵文作为单独的“文档”进行索引。搜索引擎根据相关性(如果您感兴趣,通常使用tf/idf算法)处理结果的排名

我处理斜体和红色文本的方法是在文本中包含某种标记(即,将短语用单星号表示斜体,双星号表示红色),然后告诉分析器忽略这些字符-不过,在您最终选择的框架中,可能有一种更简单的方法,所以对此持保留态度。跨越多个诗节的查询要求更复杂,但答案可能涉及将每一章作为文档索引,而不是(或者可能是除了?我必须更仔细地考虑)每一节


一句警告的话——如果你不熟悉搜索索引,即使是像弹性搜索这样设计成即插即用的东西也可能需要一些时间和精力来设置,所以如果你绝对需要快速启动和运行,并且你已经熟悉MySQL,我想它可以工作(它可以进行全文搜索)。但这肯定不是这份工作的最佳工具,所以如果这是一个你投资的项目,你会感谢你自己,如果你花点时间学习其中一个搜索框架。正如其他人所指出的那样,就你正在处理的文本数量而言,这可能有些过分,但在如何搜索你想要的文本方面,这将是非常灵活的。例如,稍后添加其他要求将非常简单(例如,您可以让人们将搜索限制为仅搜索红色文本中的匹配项)

你可以使用grep快速搜索。你打算使用什么平台?我正在使用LAMP服务器。我用PHP编程,MySQL将是最好的数据库。您存储纯文本版本和格式化版本的想法将非常有效。我从没想过要那样做。我说的“格式”是红色的基督的话和国王詹姆斯版本中的斜体字。谢谢你的回答。这仍然是2020年的最佳答案吗?