vespa - 使用继承的结构数组属性对搜索进行排名

标签 vespa

我目前正在使用文档继承,以避免必须在我制作的每个文档类型中包含特定字段。它适用于大多数场景,但是当继承结构数组时,在排名和搜索中使用该字段似乎会破坏事情。例如,采用以下应用程序。

schema base {
    document base {
        field simple_base type string {
            indexing: summary | index
        }

        struct base_struct {
            field name type string {}
        }

        field complex_base type array<base_struct> {
            indexing: summary
            struct-field name { indexing: attribute }
        }
    }
}
schema sub {
    document sub inherits base {
        field simple_sub type string {
            indexing: summary | index
        }

        struct sub_struct {
            field name type string {}
        }

        field complex_sub type array<sub_struct> {
            indexing: summary
            struct-field name { indexing: attribute }
        }
    }

    rank-profile default inherits default {
        first-phase {
            expression: nativeRank(simple_sub, complex_sub.name, simple_base, complex_base.name)
        }
    }
}

如果您尝试准备此应用程序,您将收到错误

WARNING: invalid rank feature 'nativeRank(simple_sub,complex_sub.name,simple_base,complex_base.name)': The parameter list used for setting up rank feature nativeRank is not valid: Param[3]: Field 'complex_base.name' was not found in the index environment

如果您从nativeRank函数中取出complex_base.name,它将正确编译。此外,如果您在输入以下 json 后尝试使用各个字段进行搜索:

{
  "put": "id:content:sub::0",
  "fields": {
    "simple_base": "simple",
    "simple_sub": "simple",
    "complex_base": [
      {
        "name": "complex"
      }
    ],
    "complex_sub": [
      {
        "name": "complex"
      }
    ]
  }
}

那么结果如下:

/search/?query=simple_sub:simple -> 1 result
/search/?query=complex_sub.name:complex -> 1 result
/search/?query=simple_base:simple -> 1 result
/search/?query=complex_base.name:complex -> 0 results

如果这是预期的行为,那么除了复制/粘贴之外,还有其他解决方法吗? complex_base 字段放入每个需要继承它的文档中?感谢您的帮助。

最佳答案

这与继承无关。 Vespa.ai 不支持用户定义的结构字段的排名。请参阅https://github.com/vespa-engine/vespa/issues/11580 .

关于vespa - 使用继承的结构数组属性对搜索进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64583331/

相关文章:

vespa - 在结构中搜索非原始类型

vespa - 在 vespa 中禁用缓存

vespa - 电子商务和 Vespa : filtering customer's wishlist

vespa - 在 vespa 中启动和停止服务

yql - 批量检查 Vespa 中的文档是否存在

bigdata - 在 vespa 中实现自定义搜索器

vespa - 如何在 Vespa 中配置分片?

vespa - 查询排名配置文件时,Recall 不返回任何内容