2016-03-01 23 views
1

我们必须索引书籍,每本书分为章节,章节分成多页(页面代表原稿在印刷版中切割)。SOLR架构模拟书籍,章节和页面

我们应该按照书籍和章节(对于同一本书)和页面(对于同一章节)来显示结果。

据我所知,我们有两个选择:

  1. 索引页的文件SOLR。这样,我们可以用分组但理论上检索章节(和书籍):

    • 我们会想念在两个连续的页面匹配(页切割仅仅是由于印刷上的需求,以便概念可以被划分为...在印刷书籍)

    • 我不知道是否有可能在SOLR分组结果在两个不同的级别(书籍和章节)

  2. 指数章节,SOLR文件。在这种情况下,我们将有正确的匹配,但如何获得,例如,包含匹配(或其一部分)的页面列表? (我们需要页面,因为客户端只能显示页面)

+0

如果您未修复solr,请锁定XTF(可扩展文本框架)及其重叠块的概念。 http://stackoverflow.com/questions/35253292/how-to-index-html-content-keeping-positions-as-xpath-css-selector-etc/35268321#35268321 –

回答

3

我一直都选择使每个页面成为Solr文档。

当我解析一本书的数字版本时,我捕获了哪些页码属于给定章节的信息,计算出章节的篇幅有多少,并为每章分配了某种类型的ID。由于每个页面都成为Solr文档,因此必须为每个页面的清单重复该信息,其中还包括整体书籍元数据,如标题,创建者,出版日期等。这些都不是在Solr本身完成的,而是使用shell脚本作为准备Solr索引之前。有时我将所有这些元数据存储在数据库中,有时存储在磁盘上的文件中。最后,我在Solr添加/更新XML中为每个页面生成一个清单,因此Solr很容易获取。

当我查询Solr时,我使用fq={!collapse field=<chapter-id-field> nullPolicy=expand},这样在搜索结果中,只有一个章节中最相关的页面才会显示给用户。 nullPolicy=expand属性允许搜索结果不是书籍章节正常恢复,没有崩溃,这在我组合由多种来源组成的搜索索引时非常重要。

从用户的角度来看,他们会得到一个“章节”命中,并且该章节只会在其搜索结果中显示一次。在结果用户界面中,我明确指出:“本章为x页,搜索的最佳匹配页面为y页。” UI包含一个文档查看器,所以我给用户选择直接跳转到文档查看器中的y页面(最相关的部分),或者从开始处开始阅读章节。当然,我也可以让他们从头开始阅读整本书。

至于担心跨网页拆分的概念,我没有。我发现大多数人搜索单个单词或小短语。我确定有些情况下,搜索短语分裂为两个Solr文档,但我们在这里讨论书籍:大量内容中关键词和短语倾向于重复。