索引Solr中的嵌套文档

时间:2012-04-02 20:04:11

标签: solr lucene

我见过Solr会允许你索引JSON: http://wiki.apache.org/solr/UpdateJSON

但是,没有一个例子是嵌套的。你可以索引这样的东西,如果没有,它是如何正常处理的?

{
  name: 'ben',
  state: 'california',
  country: 'united states',
  companies: [
    {
      name: 'google',
      title: 'software engineer',
    },
    {
      name: 'sherwin-williams',
      title: 'web developer'
    }
  ],
}

3 个答案:

答案 0 :(得分:1)

有几种方法可以去。可以显式存储json字符串,并在应用程序层中处理序列化。 Elasticsearch透明地使用这种方法。

对于索引,您可以使用命名约定来展平数据。 Mongodb使用这样的语法。

companies.name: ['google', 'sherwin-williams']
companies.title: ['software engineer', 'web developer']

在这种情况下请注意像

这样的查询
<BooleanQuery: +companies.name:google +companies:web developer>

会匹配。如果位置重要,则必须使用更高级的SpanQuery。

答案 1 :(得分:1)

我有同样的问题。我们想在solr复杂的json文档中使用数组和映射进行索引(比您发布的示例复杂得多)。

最后,我修改了JsonLoader类以接受这种docuemnts。它做了什么,它使json结构变平并允许对字段进行索引并保留原始的json结构[company]。最后它支持深度嵌套

您可以在

上找到包含一些解释的源代码

http://www.solrfromscratch.com/2014/08/20/embedded-documents-in-solr/

在您的示例中,它将存储/索引[基于您如何配置字段]以下结构

name: 'ben',
state: 'california',
country: 'united states',
companies.0.name: 'google',
companies.0.title: 'software engineer',
companies.1.name: 'sherwin-williams',
companies.1.title: 'web developer'
companies_json:[
    {
      name: 'google',
      title: 'software engineer',
    },
    {
      name: 'sherwin-williams',
      title: 'web developer'
    }
  ]    

微米。

答案 2 :(得分:0)

嵌套的Jsons可以在solr中使用子文档编制索引。我们可以使用Block and join query parsers来查询它。

请参阅this question