在结构中搜索非原始类型
Searching non-primitive types within a struct
我需要在一个嵌套在另一个数组中的数组中进行搜索。假设我有以下文件
schema foos {
document foos {
struct foo {
field bars type array<string> {}
}
field baz type string {
indexing: summary
}
field foos type array<foo> {
indexing: summary
struct-field bars { indexing: attribute } // breaks due to non-primitive typing
}
}
}
我需要能够在 bars 字段中进行搜索,或者至少能够在 rank-profile 中访问该字段,同时还能够基于 baz 进行搜索。我对解决方案的第一个想法是按如下方式构建它:
schema foos {
document foos {
field id type string {
indexing: summary
}
field baz type string {
indexing: summary | attribute
}
field foos type array<reference<foo>> {
indexing: summary
}
}
}
schema foo {
document foo {
field foos_ref type reference<foos> {
indexing: attribute
}
field bars type array<string> {
indexing: summary | index
}
}
import field foos_ref.baz as baz {}
}
这将允许我在 foo 集群中搜索然后获得相应的 foo 参考,但总体目标是为用户提供一个 foo 文档列表,这将需要从返回的 foo 文档列表中进行多次搜索,从而导致整体搜索速度较慢。
如果有推荐的方法来处理此类情况,我们将不胜感激。谢谢。
首先请注意,用于父子关系的引用字段只能是单值,不能是数组(https://docs.vespa.ai/documentation/reference/schema-reference.html#type:reference)。引用字段在子类型中指定以引用父类型。模式可以定义如下,其中 foos 是父类型,foo 是子类型:
schema foos {
document foos {
field id type string {
indexing: summary | attribute
}
field baz type string {
indexing: summary | attribute
}
}
}
schema foo {
document foo {
field foos_ref type reference<foos> {
indexing: attribute
}
field bars type array<string> {
indexing: summary | index
}
}
import field foos_ref.baz as foos_baz {}
import field foos_ref.id as foos_id {}
}
现在您可以使用 bars 和 foos_baz[=24 字段搜索 foo 文档=] 在查询中。在 foos_id 字段上使用分组 (https://docs.vespa.ai/documentation/grouping.html) 来围绕 foos 文档构建结果。这是在单个查询请求中处理的。
我需要在一个嵌套在另一个数组中的数组中进行搜索。假设我有以下文件
schema foos {
document foos {
struct foo {
field bars type array<string> {}
}
field baz type string {
indexing: summary
}
field foos type array<foo> {
indexing: summary
struct-field bars { indexing: attribute } // breaks due to non-primitive typing
}
}
}
我需要能够在 bars 字段中进行搜索,或者至少能够在 rank-profile 中访问该字段,同时还能够基于 baz 进行搜索。我对解决方案的第一个想法是按如下方式构建它:
schema foos {
document foos {
field id type string {
indexing: summary
}
field baz type string {
indexing: summary | attribute
}
field foos type array<reference<foo>> {
indexing: summary
}
}
}
schema foo {
document foo {
field foos_ref type reference<foos> {
indexing: attribute
}
field bars type array<string> {
indexing: summary | index
}
}
import field foos_ref.baz as baz {}
}
这将允许我在 foo 集群中搜索然后获得相应的 foo 参考,但总体目标是为用户提供一个 foo 文档列表,这将需要从返回的 foo 文档列表中进行多次搜索,从而导致整体搜索速度较慢。
如果有推荐的方法来处理此类情况,我们将不胜感激。谢谢。
首先请注意,用于父子关系的引用字段只能是单值,不能是数组(https://docs.vespa.ai/documentation/reference/schema-reference.html#type:reference)。引用字段在子类型中指定以引用父类型。模式可以定义如下,其中 foos 是父类型,foo 是子类型:
schema foos {
document foos {
field id type string {
indexing: summary | attribute
}
field baz type string {
indexing: summary | attribute
}
}
}
schema foo {
document foo {
field foos_ref type reference<foos> {
indexing: attribute
}
field bars type array<string> {
indexing: summary | index
}
}
import field foos_ref.baz as foos_baz {}
import field foos_ref.id as foos_id {}
}
现在您可以使用 bars 和 foos_baz[=24 字段搜索 foo 文档=] 在查询中。在 foos_id 字段上使用分组 (https://docs.vespa.ai/documentation/grouping.html) 来围绕 foos 文档构建结果。这是在单个查询请求中处理的。