Solr 搜索顶级和嵌套记录



我希望建立一个Solr搜索系统,该系统仅返回顶级记录,但也返回跨子项的搜索(返回其父记录)。

我正在运行Solr 8.8.1,其架构示例如下

<field name="solr_type" type="string" indexed="true" stored="true" />
<field name="path" type="string" indexed="true" stored="true" />
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<fieldType name="_nest_path_" class="solr.NestPathField" />
<field name="nest_path" type="_nest_path_" />

像这样的示例父/子记录,注意某些记录没有子记录

{
"dc_identifier_s": "41ef95d3cbc8473888d1734412bf82f0-4",
"dc_title_s": "CRB_Hydrologic",
"solr_type":"parent"
"_childDocuments_": [
{
"dc_identifier_s": "41ef95d3cbc8473888d1734412bf82f0_0-4",
"dc_title_s": "CR HUC1"
"solr_type":"child"
}]
}

我一直按照这里的说明进行操作(https://solr.apache.org/guide/8_0/searching-nested-documents.html),但由于"nest_path"没有填充,我选择使用自定义字段"solr_type",我将其设置为"父"或"子">

有关如何搜索所有记录但将结果限制为顶级和子记录的父记录的任何指导将不胜感激。

谢谢

您想要根文档,但要根据子文档中的匹配项以及根文档中的匹配项进行查找(搜索)? 这是指南中所述的"父"查询解析器的直接应用程序;像这样:

&q={!parent which="*:* -_nest_path_:*" v=$q.nest}
&q.nest=real user query goes here

你没有描述你的查询是什么样子的(上面的q.nest会是什么;我编造的一个任意命名的参数)——也许是edismax,或者谁知道是什么。 如果您需要限制与某些文档的匹配(例如简单的字段=值或空间),则需要在其中编写一个更有趣的查询;不能使用筛选器查询 (fq),因为筛选器查询筛选q匹配的文档,这些文档仅是根文档。 所以q.nest可能是像+{!geofilt} +field:value +{!edismax v=$q.user}我建议使用比 8.0 更新的 Solr 版本(您指的是 8.0 文档),但我相信 8.0 仍然可以工作。 我特别不建议嵌套文档的早期版本。

最新更新