如何为一对多关系配置Solr

时间:2014-09-01 08:57:14

标签: 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 blah"
    },
    ... etc.
]

搜索要求:

  • 用户正在搜索图书而不是,因此在给出内部所有章节文字的情况下,最佳结果必须是最相关的图书。

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

results mockup


的进展:

多值字段

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

Solr"加入"

我不知道这是否必要。每一章只有一本书所有,所以看起来我们可以把它们全部放在一个文档中而不需要太多重复。

动态字段

包含" chapter1text_txt"," chapter1title_txt"等字段和" chapter2text_txt"例如,只连接独立于solr的每章信息,所以solr不知道" chapter1text_txt"," chapter1title_txt"是同一件事的一部分。

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

1 个答案:

答案 0 :(得分:0)

文件结构

到目前为止,最好的解决方案是为chapter_titlechapter_text使用多值字段,并在上传文档中强制执行这些值的一致排序,因此第一个chapter_title始终对应到第一个chapter_text等等。

这里是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"/>

这是一种折衷方案,因为索引无法了解chapter_titlechapter_text之间的这种关系,因此无法在 X 中查询&#34;章节标题中的标题和 Y &#34;。

匹配计数

我仍然没有找到这样做的方法,但我在考虑使用一个覆盖整个文档的大型片段后,考虑使用突出显示并计算突出显示的术语数。