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

Vespa: Can we aggregate on nested fields?

在搜索定义中,struct 中的字段不能有 "attribute" 索引。

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" 分组?是否可以为结构字段添加属性或索引?或者按非 attribute?

字段分组

结构字段类型不能具有属性,如果您想 运行 使用索引搜索进行分组,则该属性是必要的先决条件,请参阅 http://docs.vespa.ai/documentation/reference/search-definitions-reference.html#struct

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

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

还不能发表评论,因此张贴为答案。

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

文档中的嵌套字段不能被索引和反过来有效搜索是否也正确(我不想使用流式搜索),因此结构必须始终是扁平的以进行索引搜索工作? 在大多数情况下,我可以实现平面结构,但是如果字段具有对象数组,我想在其中搜索此类对象的某些属性呢?

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