solr索引嵌套文档

use*_*418 2 xml indexing solr

solr 支持嵌套文档吗?有没有更好的方法来实现这种文档?

<doc>
    <field name="name">Mr. Test</field>
    <field name="case">
        <field name="link">http://foo.com</field>
        <field name="date">1-2-1234</filed>
        <field name="title">My title</filed>
    </field>
    <field name="case">
        <field name="link">http://foo.com/2/</field>
        <field name="date">1-2-1234</filed>
        <field name="title">My title 2</filed>
    </field>
</doc>
Run Code Online (Sandbox Code Playgroud)

我所拥有的是一个参与过多个案件的人。这种形式的模式对于 solr 来说合法吗?不同的人也可以参与同一案件。所以它看起来确实像是关系数据库的任务,但我在这个项目中使用 solr。

Gun*_*jan 5

新版本的 Solr 提供了对嵌套文档的支持

索引这个 Json

[
  {
    "id": "1",
    "title": "Solr adds block join support",
    "content_type": "parentDocument",
    "_childDocuments_": [
      {
        "id": "2",
        "comments": "SolrCloud supports it too!"
      }
    ]
  },
  {
    "id": "3",
    "title": "Lucene and Solr 4.5 is out",
    "content_type": "parentDocument",
    "_childDocuments_": [
      {
        "id": "4",
        "comments": "Lots of new features"
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

在 schema.xml 中,您必须添加此处使用的所有字段,即“标题”、“内容类型”、“评论”。参数“ childDocuments ”是 solr 处理的参数,通过它它可以理解这是一个子文档,而“content_type”:“parentDocument”是 solr 理解这是父文档的标识符。如果我们查询,索引此 Json 后

"*":"*"
Run Code Online (Sandbox Code Playgroud)

我们总共应该看到 4 个文档。现在我们可以借助Block 和 join 查询解析器获取父文档或子文档。尝试这个查询

http://localhost:8983/solr/collection_test/select?q={!child%20of=%22content_type:parentDocument%22}title:lucene
Run Code Online (Sandbox Code Playgroud)

和这个

http://localhost:8983/solr/collection_test/select?q={!parent%20which=%22content_type:parentDocument%22}comments:SolrCloud
Run Code Online (Sandbox Code Playgroud)