在Solr搜索中也显示没有孩子的父母

42fyovps  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(183)

我调用了一个相当复杂的搜索查询(无子项的根记录),子项的父项将显示在结果中(搜索父记录和子记录)。从(Solr search top level and nested records)非常有效,除非父对象没有任何子对象,我希望你能帮我修改一下这个查询,这样没有孩子的父母也会出现在搜索结果中。
我使用的带有url参数的查询如下所示:

http://localhost:8983/solr/b-core/select?&fq=solr_type:parent&childFilter={!edismax%20v=$q.user}&fl=*,[child%20childFilter=$childFilter%20%20limit=1000]&q={!parent%20which=solr_type:parent%20v=$q.child}%20OR%20{!edismax%20v=$q.user}&q.child=%20%2Bsolr_type:child%20%20%2B{!edismax%20v=$q.user}&q.user=suppressed_b:False&rows=10&start=0&sort=&fq=solr_type:parent

它将转换为以下带有params的结果:

status: 0,
QTime: 9,
params: {
childFilter: "{!edismax v=$q.user}",
ps: "0",
indent: "2",
echoParams: "all",
fl: "*,[child childFilter=$childFilter  limit=1000]",
fq: [
"solr_type:parent",
"solr_type:parent"
],
tie: "0.01",
defType: "lucene",
qf: "...
      ",
q.child: " +solr_type:child  +{!edismax v=$q.user}",
wt: "json",
mm: "6<-1 6<90%",
qs: "1",
q.alt: "*:*",
facet.field: [
...
],
start: "0",
sort: "",
rows: "10",
q: "{!parent which=solr_type:parent v=$q.child} OR {!edismax v=$q.user}",
facet.limit: "10",
spellcheck: "true",
pf: "...
      ",
q.user: "suppressed_b:False",
facet.mincount: "1",
facet: "true",
rid: "-2221"
}
},

已上载的包含子项的记录如下所示:https://drive.google.com/file/d/1wZoCZDUS7evpA8ssSvSB1WlWmvNgp_wE/view?usp=sharing
如果重新发布此记录而不包含子项(例如,删除“childDocuments”列表),则在执行任意位置搜索时,结果中将不会显示无子项的父项。
任何指导将是非常感谢在修复上述搜索,使父母的子女和无子女的父母记录出现在搜索结果中。
谢谢你的时间。

nxagd54h

nxagd54h1#

问题出在您的q参数上。作为人类,乍一看,结构很清楚--两个子句的布尔OR,其中一个是“parent”查询,右边是“edismax”。但是对于Solr来说,如果查询字符串以{!开始,那么如果存在v本地参数,则下一个}之后的所有内容都将被忽略。解决方案很简单--在那里放一个空格,就像我看到您已经为q.child做的那样(它实际上不需要那个空格)。我提交了这个:https://issues.apache.org/jira/browse/SOLR-15906

相关问题