Weaviate 是一款为灵活性和可扩展性而设计的向量搜索引擎,它有三个核心特性使其与众不同:混合搜索能力、用于扩展功能的模块化架构以及 GraphQL 优先的查询界面。这些特性使其能够适应各种用例,从语义搜索到多模态数据检索。
混合搜索 Weaviate 通过将基于关键词 (BM25) 和基于向量的检索组合到单个查询中来支持混合搜索。这允许开发人员在传统关键词匹配和语义理解之间取得平衡。例如,搜索“apple”可以通过评估文本相似度向量,同时优先考虑精确的关键词匹配,来返回与水果和科技公司都相关的结果。该系统使用可自定义的权重合并来自两种方法的分数,从而确保即使查询模糊也能获得相关的结果。开发人员可以调整权重(例如,70% 向量,30% 关键词)来为特定数据集微调结果。这种混合方法在电子商务等应用程序中特别有用,在这些应用程序中,用户可能会使用产品名称和描述性术语的混合进行搜索。
用于定制的模块 Weaviate 的模块化设计允许开发人员插入预构建或自定义模块来处理向量化、推理或数据丰富等任务。例如,text2vec-transformers
模块可以使用 BERT 等模型生成嵌入,而 qna-transformers
模块允许直接在存储的数据上进行问答。像 img2vec-neural
这样的模块扩展了 Weaviate 以支持图像嵌入,从而实现多模态搜索。可以通过 schema 配置这些模块,而无需更改代码,从而可以轻松切换模型或添加功能。例如,开发人员可以使用 img2vec-neural
通过 ResNet 模型索引产品图像,稍后通过组合跨模态检索模块,使用文本描述查询它们。
GraphQL 查询的灵活性 Weaviate 使用 GraphQL 作为其主要查询语言,提供对数据检索的精确控制。开发人员可以构建查询以获取嵌套数据、应用过滤器并在单个请求中检索特定于向量的元数据(例如,确定性分数)。例如,查询可能会搜索 2020 年之后发布的文章(where
过滤器),包括基于向量的“气候科学”相似性搜索,并仅使用 _additional
字段返回标题、作者和确定性分数。这避免了多次 API 调用并简化了与前端工具的集成。GraphQL 的类型系统也与 Weaviate 的 schema 对齐,从而可以在 IDE 中启用验证和自动完成。这种方法在需要复杂数据关系的应用中特别有用,例如将用户偏好与语义内容匹配相结合的推荐系统。
通过集成混合搜索、模块化扩展和 GraphQL,Weaviate 为开发人员提供了一个通用的平台,可以高效地构建处理结构化和非结构化数据的搜索系统。