Vespa:我们可以在嵌套字段上聚合吗?

时间:2017-10-24 17:30:33

标签: vespa

在搜索定义中,struct中的字段不能具有“属性”索引。

http://docs.vespa.ai/documentation/reference/search-definitions-reference.html#field_types

此外,默认情况下,struct和maps不是属性。 结果搜索定义如下所示:

struct nlp {
  field token type string {
      match: text //can't add indexing here
  }
}

field n type nlp {
      indexing: summary //can't add attribute here
}

如何添加搜索定义以便我们可以按“n.token”进行分组?是否可以为struct字段添加属性或索引?或者分组不是属性的字段?

2 个答案:

答案 0 :(得分:5)

如果要使用索引搜索运行分组,

结构字段类型不能具有必要先决条件的属性,请参阅http://docs.vespa.ai/documentation/reference/search-definitions-reference.html#struct

对于使用mode = index的struct字段,你唯一可以做的就是将它们作为摘要(响应)的一部分。您可以添加一个自定义搜索器,该搜索器在struct字段上进行聚合,分析前K个检索到的命中。见http://docs.vespa.ai/documentation/searcher-development.html

使用mode = streaming,您可以对结构字段进行分组,更多关于此处的流式传输http://docs.vespa.ai/documentation/streaming-search.html

答案 1 :(得分:1)

无法发表评论,因此张贴为答案。

@jkb这相当于我们在不在结构中的某些字段上运行搜索,返回大量文档然后在搜索器中合成它们(链接搜索器基本上会做类似的事情)?

说文档中的嵌套字段无法编入索引并且有效搜索(我不想使用流式搜索)也是正确的,因此结构必须始终是平的,以便索引搜索能够工作吗? 在大多数情况下,我可以实现一个扁平结构,但是如果我想要搜索这样一个对象的某些属性的对象数组呢?

"x" : [
    object: { attributes},
    object: {attributes}
 ]