使用Vue 3 + @prismicio/client调用Prismic fulltext谓词查询时出现意外字段错误的问题咨询
嘿,我帮你梳理清楚这个问题了,你代码跑不起来主要是两个关键错误,还有对Prismic文档里fulltext谓词参数的理解偏差:
为什么你的代码会报错?
1. 字段路径格式完全错了
Prismic 中引用自定义类型的字段必须加上 my. 前缀,这是它的字段命名空间规则。你写的 articles.article_title 会被识别为不存在的字段,直接触发“意外字段”错误。正确的路径应该是 my.articles.article_title。
2. 谓词类型用错了
你本来想做全文搜索,但却用了 predicate.not —— 这个谓词是用来排除匹配某个固定值的文档的,和全文搜索完全不是一个功能。要实现全文搜索,必须用 predicate.fulltext。
正确的代码写法
如果你想在 articles 类型的 article_title 字段中搜索关键词,代码应该改成这样:
async searchByQuery(query) { const fullTextResult = await this.$prismic.client.get({ predicates: this.$prismic.predicate.fulltext("my.articles.article_title", query), }); console.log(fullTextResult); }
再给你明确下Prismic fulltext谓词的参数含义(对应你困惑的文档说明)
predicate.fulltext() 接受两个必填参数:
- 第一个参数:搜索范围,可以是:
- 单个字段:
my.自定义类型名.字段名(比如你这里的my.articles.article_title) - 整个自定义类型的所有字段:
my.自定义类型名(比如my.articles,会搜索该类型下所有可全文检索的字段) - 所有文档的所有字段:
*
- 单个字段:
- 第二个参数:你要搜索的关键词字符串。
额外补充:如果确实需要排除全文搜索结果
如果你原本的意图是排除那些标题包含query的文档,那应该用 predicate.not 包裹 fulltext,写法是:
async searchByQuery(query) { const fullTextResult = await this.$prismic.client.get({ predicates: this.$prismic.predicate.not( this.$prismic.predicate.fulltext("my.articles.article_title", query) ), }); console.log(fullTextResult); }
这样修改后应该就能正常运行了,之前的问题主要是对Prismic的字段命名规则和谓词功能的理解偏差~
内容的提问来源于stack exchange,提问作者Chadere Oghenenyoreme
相关产品推荐
相关产品推荐

