十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Weaviate GraphQL 语义搜索完整教程:一条查询找出 10 个最相似商品

Weaviate GraphQL 语义搜索完整教程:一条查询找出 10 个最相似商品 Weaviate GraphQL 语义搜索完整教程一条查询找出 10 个最相似商品【免费下载链接】weaviateWeaviate is an open-source vector database that stores both objects and vectors, allowing for the combination of vector search with structured filtering with the fault tolerance and scalability of a cloud-native database​.项目地址: https://gitcode.com/GitHub_Trending/we/weaviateWeaviate 是一个开源向量数据库它把对象和向量存在一起让你可以用一段自然语言搜出语义上最接近的内容同时还能按结构化字段做筛选。本文围绕一个真实任务展开——在商品库里找出与当前商品最相似的 10 个——带你一步步写出第一条 Weaviate GraphQL 查询、加上过滤条件、取出相似度分数最后一次请求把关联数据也带回来。写第一条 Weaviate GraphQL 查询的最快方式先把概念理清Weaviate 里的每类数据比如Product在数据库里叫一个类所有类的结构定义合在一起就是 schema可以理解为一张描述每张表有哪些字段的模板。你的 GraphQL 查询会直接对着这个模板写写错字段名会立刻报错这比发出去才知道 404的 REST 接口省心很多。动态模板的生成逻辑就在 adapters/handlers/graphql/ 目录里服务启动时会把数据库 schema 翻译成 GraphQL 模式所以你在库里建了什么类查询端就能查到什么。第一条查询可以这样写目标是拉 10 个商品、只看两个字段{ Get { Product(limit: 10) { name price } } }Get是根入口Product后面跟类名括号里写查询参数花括号里写你要的字段。请求返回的内容和你列的字段一一对应多一个都不给——这就是 GraphQL 和 REST 最大的体感差异返回体大小由你自己决定。用一句自然语言搜出相似内容nearText 向量检索关键词搜索只能匹配字面相同的内容而蓝牙耳机和无线耳麦字面不同、意思相同。要做到按意思搜就要用到 Weaviate 的向量检索每条数据入库时会被模块转换成一串数字向量语义相近的内容在数字空间里距离也近。在 GraphQL 里你只需把一段文字传给nearText参数{ Get { Product( nearText: { concepts: [无线降噪耳机] } limit: 10 ) { name } } }Weaviate 会先把你输入的无线降噪耳机转成向量再按距离从近到远取出商品。这条链路的解析实现在 adapters/handlers/graphql/local/get/ 中的GetClass方法它把查询参数打包成GetParams交给底层存储去执行。想换成直接给我向量的精确模式可以用nearVector想关键词 语义各占一半可以用hybrid。三种方式可以混着用具体参数定义可参考 adapters/handlers/graphql/local/explore/ 目录。同一请求里按类别和价格过滤where 子句用法光有语义搜索还不够实际业务往往要限定范围只看数码类别、价格低于 500 的商品。where参数就是干这个的它表达结构化筛选条件和nearText写在同一个括号里即可叠加生效Product( where: { path: [category] operator: Equal valueString: 数码 } nearText: { concepts: [无线降噪耳机] } limit: 10 ) { name price }path指向字段名operator指定比较方式Equal、GreaterThan、And、Or等valueString是具体值。想同时限定价格和类别把多个条件用And/Or包起来就行嵌套过滤支持多层组合。这套先按语义圈定候选、再按字段精确裁剪的组合拳正是 Weaviate 向量数据库区别于纯文本搜索的核心价值所在。怎么一次请求拿到关联数据嵌套查询写法商品页面通常还要展示该商品所属品牌的其他产品或用户评价。用 REST 你得发第二次请求而 GraphQL 允许在字段里继续往下挖{ Get { Product(where: { path: [sku], operator: Equal, valueString: SKU-001 }) { name brand { ... on Brand { name topProducts(limit: 3) { name } } } } } }brand是一个引用字段引用类型... on Brand这种片段语法告诉解析器展开成 Brand 类后再取这些字段。一次请求主商品和关联数据一起回来省掉客户端拼装的麻烦。给结果加上相似度分数_additional 元数据块向量搜索结果默认只给数据不给有多像。想拿到距离分数在字段列表里加一个_additional块Product(nearText: { concepts: [无线降噪耳机] }, limit: 10) { name _additional { distance certainty } }distance是距离越小越相似certainty是换算后的相似度越大越像前端可以直接用它画进度条或做阈值截断。这个块里还能取_additional { id }、creationTime等元数据不用再去查别的接口。报错时看哪里调试入口与接口验证两个调试抓手一是服务自带的 GraphiQL 网页编辑器默认 8080 端口的/graphql路径它提供字段自动补全写查询时能实时看到 schema 里有哪些类、哪些字段新手强烈建议从这里起步二是看日志。模式重建时服务会打出一条graphql_rebuild的 debug 日志见 adapters/handlers/graphql/schema.go如果你刚建了类却发现查不到先确认这条日志有没有在之后触发过。项目内置的大量查询测试用例放在 test/acceptance/graphql_resolvers/ 目录想验证某个参数的标准写法翻那里的用例最快。立即可执行的下一步和两个最常见的坑你现在可以这样做起一个 Weaviate 实例建一个含name、category字段和向量索引的商品类照本文顺序依次提交纯 Get → 加 nearText → 加 where → 加 _additional四条查询每加一步对比返回体变化30 分钟内就能把整条链路跑通。两个高频坑提前提醒 字段名写错不报数据错而报模式错GraphQL 会在解析阶段就拒绝未知字段看到Cannot query field时先回 schema 核对拼写别怀疑数据。distance 和 certainty 方向相反distance越小越好、certainty越大越好写阈值判断时选错一个方向结果会越筛越不像排查半天。把这两点记牢配合 GraphiQL 的自动补全Weaviate GraphQL 日常查询基本不会再卡壳。【免费下载链接】weaviateWeaviate is an open-source vector database that stores both objects and vectors, allowing for the combination of vector search with structured filtering with the fault tolerance and scalability of a cloud-native database​.项目地址: https://gitcode.com/GitHub_Trending/we/weaviate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表