我在SOLR中有一些嵌套数据。
{
"name":["Abc"],
"age":[30],
"hobby":["singing"],
"_childDocuments_":[
{
"college":["xyz"],
"year":[2015],
"id":"3752-22491",
"3.c.m.c-id":["256939"],
"2.c.m-id":["354291"],
"path":["3.c.m.ci"]},
{
"subject":["history","science"],
"marks-1":[75],
"marks-2":[75],
"id":"3752-802126",
"2.c.m-id":["354291"],
"path":["2.c.m"]}
]}
我不会从solr中获得 marks-1 和 marks-2 。当我搜索时,我发现整个数据作为响应。我只需要获取这两个字段的帮助。
感谢您的帮助。
答案 0 :(得分:0)
您无法使用ChildDocTransformer执行此操作,因为它的目的是过滤显示哪些子文档,而不是过滤子文档的哪些字段返回。
另外,我很确定,在客户端或转换响应期间过滤掉这些字段会更容易,因为在限制子文档字段时不会有任何性能改进。
但是,如果您仍希望通过Solr查询执行此操作,则应使用subquery transformer之类的内容:
solr/collection_name/select?fl=id,title_t,stars:[subquery] //enter mode for subquery
&indent=on
&q=title_t:* // this is the general query, here, just selecting book
&stars.fl=stars_i // which fields from the child documents to return
&stars.q={!prefix f=id v=$row.id} // subquery that you need to adapt
我对来自here的图书/评论的集合进行了此查询,并且工作得很好。但是,您需要调整子查询。这里的问题是,您只需要选择与父文档相对应的特定子文档。它可能是某种 parent_id 或其他东西(我在你的数据中看不到这些信息,所以你需要它)。
你为什么需要它?否则,您的每个父文档都将包含 ALL 子文档,您将使用子查询进行选择。在我的示例中,我使用前缀查询,因为子文档的id包含父文档的id。 E.g。
id:book1
并且,子ID是:
id:book1_r1