【问题标题】:How to filter specific field from child document in SOLR如何从 SOLR 中的子文档中过滤特定字段
【发布时间】:2017-09-14 08:16:25
【问题描述】:

我在 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 获得 ma​​rks-1ma​​rks-2。当我搜索时,我发现整个数据作为响应。我需要帮助才能仅获取这两个字段。

提前感谢您的帮助。

【问题讨论】:

  • 你能显示你当前的查询吗?
  • 我正在使用这个查询 (localhost:8983/solr/test/…*,[child parentFilter=path:1.c childFilter="path:*.c.*" limit=50]&q=name:Abc )

标签: solr solrj


【解决方案1】:

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。例如

id:book1

并且,子 ID 是:

id:book1_r1

【讨论】:

    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多