子文档的Solr查询并返回父文档和筛选的子文档



我在创建Solr查询以提取正确的文档时遇到了问题,我开始怀疑我尝试做的事情是否可行。

目前在Solr 8.9上使用托管模式,每个字段都使用通配符字段。

首先,文档的外观

(因修订内部业务语言而更改名称(:


{
"id": "COUNTY:1",
"county_name_s": "Hertfordshire",
"coordinates_s": {
"id": "COUNTY:1COORDINATES:!",
"lat_s": "54.238948",
"long_s": "54.238948"
},
"cities": [
{
"id": "COUNTY:1CITY:1",
"city_name_s": "St Albans",
"size": {
"id": "COUNTY:1CITY:1SIZE:1",
"sq_ft_s": "100",
"sq_meters_s": "5879"
}
},
{
"id": "COUNTY:1CITY:2",
"city_name_s": "Watford",
"size": {
"id": "COUNTY:1CITY:2SIZE:2",
"sq_ft_s": "150",
"sq_meters_s": "10000"
}
}
],
"mayor": {
"title_s": "Mrs.",
"first_name_s": "Sheila",
"last_name_s": "Smith"
}
}

我想回报的是:

{
"id": "COUNTY:1",
"county_name_s": "Hertfordshire",
"coordinates": {
"id": "COUNTY:1COORDINATES:!",
"lat_s": "54.238948",
"long_s": "54.238948"
},
"cities": [
{
"id": "COUNTY:1CITY:1",
"city_name_s": "St Albans",
"size": {
"id": "COUNTY:1CITY:1SIZE:1",
"sq_ft_s": "100",
"sq_meters_s": "5879"
}
}
],
"mayor": {
"title_s": "Mrs.",
"first_name_s": "Sheila",
"last_name_s": "Smith"
}
}

基本上,我的目标是或多或少地返回整个东西,但要过滤掉其中一个城市。例如,城市的条件类似于city_name_s:"St Albans"。因此,也就是说,我想要父项和所有子项,但是,如果子项在该数组中(即cities array(,则给定字段(city_name_s(必须等于我定义的值,否则我们不想要该子项。

我尝试过的事情:

我在这里基本上尝试了两种方法:

  1. 我试着和{!child}和{!parent}一起玩,以获得我想要的结果。目前,我只能从市一级或整个地方得到一些东西,就好像过滤器不在县一级一样。

  2. 我尝试更改childFilter选项的值,比如:

    • city_name_s:"St Albans" OR (*:* NOT city_name_s:[* TO *])尝试说"如果字段存在,它应该是这个">

无论如何,我开始没有这个想法了;在过去的几天里,我一直在努力,但并没有真正接近它。

提前感谢您的帮助;目前我的头撞在墙上,所以任何建议都非常受欢迎:(

我在solr 9.0.0中遇到了类似的问题,这为我解决了这个问题:Apache solr Filter on Child Documents

在您的情况下,只需添加fl=*,[child childFilter=city_name_s:"St Albans"]

最新更新