Search 如何为一对多关系配置Solr

Search 如何为一对多关系配置Solr,search,solr,flatten,Search,Solr,Flatten,我正在使用Solr开发一个搜索应用程序,它是搜索分成章节的“书籍”所必需的。一本书可能是这样的: title: "book title" author: "mr whoever" chapters: [ { title: "some chapter title" text: "blah blah blah" }, { title: "some other title" text: "blah blah bla

我正在使用Solr开发一个搜索应用程序,它是搜索分成章节的“书籍”所必需的。一本书可能是这样的:

title: "book title"
author: "mr whoever"
chapters: [
    {
        title: "some chapter title"
        text: "blah blah blah"
    },
    {
        title: "some other title"
        text: "blah blah blah"
    },
    ... etc.
]
搜索要求:
  • 用户搜索的是书籍而不是章节,因此,考虑到里面的所有章节文本,最重要的结果必须是最相关的书籍

  • 用户需要查看一本书中哪些章节匹配,关于这些章节的信息,以及每个章节有多少匹配


进展: 多值字段 Solr支持多值字段(即,每本书有多个章节),但在图书文档中,每个字段不可能有两个字段(标题和文本)

Solr“加入” 我不知道这是否必要。每一章只属于一本书,所以我们似乎可以把它们全部放在一个文档中,而不需要太多重复

动态场 例如,有“chapter1text_txt”、“chapter1title_txt”和“chapter2text_txt”等字段,并且只连接独立于solr的每章信息,因此solr不知道“chapter1text_txt”、“chapter1title_txt”是同一事物的一部分

配置schema.xml以支持和搜索此类文档的正确方法是什么?

文档结构 到目前为止,最好的解决方案是为
章节标题
章节文本
使用多值字段,并在上传文档中强制执行这些值的一致顺序,因此第一个
章节标题
始终对应于第一个
章节文本
,依此类推

下面是schema.xml的一节:

<field name="report_title"
       type="text_en" indexed="true" stored="true"/>

<field name="chapter_title"
       type="text_en" indexed="true" stored="true" multiValued="true"/>

<field name="chapter_text"
       type="text_en" indexed="true" stored="true" multiValued="true"/>

这是一个折衷方案,因为索引无法了解
章节标题
章节文本
之间的关系,因此不可能要求“标题中带有X和文本中带有Y的章节”

比赛计数 我仍然没有找到这样做的方法,但我正在考虑使用突出显示,并在要求提供一个涵盖整个文档的大片段后计算突出显示的术语的数量