database - 存储大型可搜索文本文件的最佳方式

标签 database search large-text large-data

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

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

它还需要尽可能快速和高效(内存和 CPU 使用率)。将考虑任何存储格式(MySQL、JSON 或 XML 文本文件等),只要查询可以忽略格式即可。文件大小和数量并不重要,所以我可以将书籍甚至章节拆分成单独的文件。

还有一件更重要的事情要记住,我想要某种形式的搜索方法,可以搜索多个经文。因此,搜索“却因上帝不差他的儿子而得永生”将返回约翰福音 3:16,17。感谢所有想法!

最佳答案

有许多不同的开源文档搜索引擎,它们正是为您正在尝试做的事情而设计的。 Solr、Elastic Search、Xapian、Whoosh、Haystack(为 Django 制作)等。 S.O. 上还有其他帖子。和其他地方讨论使用一个与另一个的好处,但你的要求很简单,其中任何一个都很好(如果你的项目开始,很容易以最小的努力扩展,这总是很高兴知道)。所以看看他们的例子,看看哪个对你来说看起来最直观——Solr 可以说是最流行的,也是我唯一使用过的,但 Elastic Search 使用同样流行的 Lucene 后端,显然更容易启动和运行,所以我会从那里开始。

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

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

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

关于database - 存储大型可搜索文本文件的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7458621/

相关文章:

algorithm - 使用 BFS 检测循环

PHP - 在数组中搜索字符串

c++ - 在非常大的文本中搜索多个字符串

python - 使用python从非常大的文本文件(16gb)中跳过一行的省时方法

search - 我页面中的重复 URL,最佳解决方案?

java - 试图将 Java 变量传递给 sql 字符串

database - 船舶管理数据库结构讨论(应该非规范化?)

java - Spring-data-jpa - .save() 什么时候不返回相同的实体?

php - 从 mysql 中的两个不同表中选择总计但得到不同的答案