4

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

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

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

不过要记住的更重要的一件事是,我想要某种形式的搜索方法,可以搜索多节经文。因此,寻找“但上帝没有派他的儿子来获得永生”将返回约翰福音 3:16,17。感谢所有的想法!

4

2 回答 2

4

有许多不同的开源文档搜索引擎,它们正是为您想要做的事情而设计的。Solr、Elastic Search、Xapian、Whoosh、Haystack(为 Django 制作)等。SO 和其他地方还有其他帖子介绍了使用一对一的好处,但是您的要求很简单,以至于其中任何一个都非常好(并且如果您的项目起飞,很容易以最小的努力进行扩展,这是总是很高兴知道)。所以看看他们的例子,看看哪个对你来说最直观——Solr 可以说是最受欢迎的,也是我唯一使用过的,但是 Elastic Search 使用相同的流行 Lucene 后端,显然更容易上手和运行,所以我会从那里开始。

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

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

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

于 2011-09-18T01:30:43.900 回答
2

我不知道圣经有格式。这有什么用途?如果是为了诗句,我建议你将每节诗句存储在数据库中。在高度规范化的形式中,你有一张放书的桌子,一张放章节的桌子和一张放经文的桌子。每节经文由一个经文编号和一个经文文本组成。

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

如果经文是纯文本,您可以通过将其存储在 MySQL 中并为其创建 FULLTEXT 索引来轻松地使其可搜索。这样,您可以非常有效地搜索,甚至可以使用通配符等。

如果要对经文进行格式化,您可以选择创建两列,一列用于搜索,另一列用于显示格式化文本,但我怀疑您是否需要这个。

PS:5 MB 的文字真的不算什么。如果你有一个专门的程序,你可以将它保存在内存中的单个字符串中,并使用strpos或类似的函数来查找文本。您使用什么语言、数据库和平台?

于 2011-09-18T00:02:50.320 回答