如何为一对多关系配置 Solr
Posted
技术标签:
【中文标题】如何为一对多关系配置 Solr【英文标题】:How to configure Solr for one-to-many relationship 【发布时间】:2014-10-25 11:14:29 【问题描述】:我正在使用 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.
]
搜索要求:
用户搜索的是 books 而不是 chapters,因此考虑到里面的所有章节文本,排名靠前的结果必须是总体上最相关的书籍。 p>
用户需要查看匹配书中的哪些章节、关于这些章节的信息以及每章匹配的数量。
进展:
多值字段
Solr 支持多值字段(即每本书多个章节),但书籍文档的每个字段不可能有两个字段(标题和文本)。
Solr“加入”
我不知道这是否有必要。每章只属于一本书,所以看起来我们可以将它们全部放在一个文档中而无需过多重复。
动态字段
例如具有“chapter1text_txt”、“chapter1title_txt”和“chapter2text_txt”等字段,并且仅连接独立于 solr 的每章信息,因此 solr 不知道“chapter1text_txt”、“chapter1title_txt”是相同的一部分东西。
配置 schema.xml 以支持和搜索此类文档的正确方法是什么?
【问题讨论】:
【参考方案1】:文档结构
到目前为止,最好的解决方案是为 chapter_title
和 chapter_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_title
和chapter_text
之间的这种关系,所以不可能要求“标题中带有X和Y的章节 在文本中”。
匹配计数
我仍然没有找到这样做的方法,但我正在考虑在要求一个覆盖整个文档的大型 sn-p 后使用突出显示和计算突出显示的术语的数量。
【讨论】:
以上是关于如何为一对多关系配置 Solr的主要内容,如果未能解决你的问题,请参考以下文章