在 Solr 搜索中也显示 parents 而没有 children
Showing parents without children in Solr search too
我正在调用一个相当复杂的搜索查询,因此只有 parents(childless 的根记录)和 children 的 parents出现在结果中(搜索 parent 和 child 记录)。我从 () 得到的查询效果很好,除非 parent 没有任何 children,它不会显示在搜索结果中。我希望你能帮我修改查询,使没有 children 的 parents 也出现在搜索结果中。
我使用的带有 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
使用参数转换为以下结果:
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"
}
},
children 的上传记录如下所示:https://drive.google.com/file/d/1wZoCZDUS7evpA8ssSvSB1WlWmvNgp_wE/view?usp=sharing
并且在没有 children 的情况下重新发布此记录(例如删除“childDocuments”列表)可以防止 childless parent 在任意位置搜索期间显示在结果中。
任何指导将不胜感激,以修复上述搜索,以便 parent of children 和 childless parent 记录出现在搜索结果中.
感谢您的宝贵时间。
问题出在您的 q
参数中。乍一看,结构很清楚——两个子句的布尔或,其中一个是“父”查询,右边是“edismax”。但是,对于 Solr,如果查询字符串以 {!
开头,那么如果存在 v
本地参数,则忽略下一个 }
之后的所有内容。解决方案很简单——只需将 space 放在那里,就像我看到您已经为 q.child
所做的那样(实际上并不需要 space)。
我提交了这个:https://issues.apache.org/jira/browse/SOLR-15906
我正在调用一个相当复杂的搜索查询,因此只有 parents(childless 的根记录)和 children 的 parents出现在结果中(搜索 parent 和 child 记录)。我从 (
我使用的带有 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
使用参数转换为以下结果:
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"
}
},
children 的上传记录如下所示:https://drive.google.com/file/d/1wZoCZDUS7evpA8ssSvSB1WlWmvNgp_wE/view?usp=sharing
并且在没有 children 的情况下重新发布此记录(例如删除“childDocuments”列表)可以防止 childless parent 在任意位置搜索期间显示在结果中。
任何指导将不胜感激,以修复上述搜索,以便 parent of children 和 childless parent 记录出现在搜索结果中.
感谢您的宝贵时间。
问题出在您的 q
参数中。乍一看,结构很清楚——两个子句的布尔或,其中一个是“父”查询,右边是“edismax”。但是,对于 Solr,如果查询字符串以 {!
开头,那么如果存在 v
本地参数,则忽略下一个 }
之后的所有内容。解决方案很简单——只需将 space 放在那里,就像我看到您已经为 q.child
所做的那样(实际上并不需要 space)。
我提交了这个:https://issues.apache.org/jira/browse/SOLR-15906