使用Lucene / Solr / Elasticsearch进行分层分面,其中文档可以包含多个父项

时间:2016-04-12 11:33:07

标签: elasticsearch solr lucene

我目前正在评估是否在项目中使用elasticsearch或solr并在需要实施的案例中进行移动。我找到了一个案例,我找不到任何对我感到有点奇怪的文件,因为案件对我来说似乎很常见。这些类别是用户提供的,所以我事先并不知道。考虑以下具有多个类别的文档的分类法部分:

  • 根(3)
    • 书籍(2)
      • 科幻(1)
        • 文献展
      • 幻想(2)
        • 文献展
        • DocumentC
    • 电影(1)
      • 行动(1)
        • DocumentB
    • 游戏(1)
      • 冒险
        • DocumentB

在这种情况下,DocumentB可以是例如印第安纳琼斯正则术语层次结构可以使用solr / elastic中的路径层次结构标记器来实现,因此DocumentC将“Root / Books / Fantasy”作为类别,路径分为“/”。

然而,DocumentB需要有两个路径(“Root / Movies / Action”和“Root / Games / Adventure”)。我考虑使用路径层次结构标记器为弹性文档动态添加每个路径的一个category_n字段,然后对所有category_ *字段进行类别搜索,但我不知道这是否是正确的方法,特别是考虑到facet的文档计数并不简单,因为父节点的计数不是其子节点的总和(文档可以在多个子类别中,不应计入多次)。

在solr / elastic中实现它的好方法是什么?

干杯

1 个答案:

答案 0 :(得分:0)

我最终使用ES并且有一个类别字段,我在其中放置了每个路径到节点。所以'根/电影/动作'和'根/游戏/冒险'。然后我使用了一个路径层次结构标记生成器拆分/使用此字段。 ES支持在该字段中放置多个路径并进行搜索。然后我在类别上使用了一个聚合,这就产生了我想要的,如果在一个分支中出现多次,文档就不会多次计算。