如何在SOLR中过滤子文档中的特定字段

时间:2017-09-14 08:16:26

标签: solr solrj

我在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 。当我搜索时,我发现整个数据作为响应。我只需要获取这两个字段的帮助。

感谢您的帮助。

1 个答案:

答案 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