You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Weaviate数据库中查找语义相似词汇?

实现Weaviate语义相似查询并存储额外字段

核心逻辑

Weaviate的语义匹配依赖向量嵌入,只需确保语义相关字段(比如示例里的词汇名称)被纳入向量计算,额外字段(如描述)作为普通属性存储即可——这些额外字段不会参与向量生成,仅用于数据返回。

具体实现步骤及代码示例

1. 初始化Weaviate客户端

假设使用本地Weaviate实例,若用第三方向量器(如OpenAI)需补充对应密钥:

import weaviate

client = weaviate.Client(
    url="http://localhost:8080",
    # 若使用OpenAI向量器,添加以下配置
    # additional_headers={"X-OpenAI-Api-Key": "YOUR_OPENAI_KEY"}
)

2. 定义Schema(数据结构)

创建数据类,指定向量器,同时定义语义字段和额外字段:

# 测试时先删除已有类
if client.schema.exists("Vocabulary"):
    client.schema.delete_class("Vocabulary")

class_definition = {
    "class": "Vocabulary",
    "vectorizer": "text2vec-openai",  # 也可使用Weaviate内置的text2vec-contextionary
    "properties": [
        {
            "name": "word",
            "dataType": ["string"],
            "description": "用于语义匹配的核心词汇"
        },
        {
            "name": "description",
            "dataType": ["string"],
            "description": "无关语义的额外描述信息"
        },
        {
            "name": "category",
            "dataType": ["string"],
            "description": "额外分类标签"
        }
    ]
}

client.schema.create_class(class_definition)

3. 导入带额外字段的数据

批量添加包含核心词汇和额外信息的对象:

data_objects = [
    {"word": "orange", "description": "橙色柑橘类水果,富含维生素C", "category": "fruit"},
    {"word": "dog", "description": "常见家养宠物,性格忠诚活泼", "category": "animal"},
    {"word": "cat", "description": "喜静的家养宠物,擅长捕捉小型啮齿动物", "category": "animal"},
    {"word": "bottle", "description": "用于盛装液体的容器,材质多为玻璃或塑料", "category": "container"},
    {"word": "laptop", "description": "便携个人计算机,适合移动办公", "category": "electronic"}
]

with client.batch as batch:
    batch.batch_size = 5
    for obj in data_objects:
        batch.add_data_object(obj, class_name="Vocabulary")

4. 执行语义相似查询

通过nearText查询与'tangerine'语义最接近的对象,并返回所有字段:

response = client.query.get(
    "Vocabulary",
    ["word", "description", "category"]  # 指定要返回的所有字段
).with_near_text({
    "concepts": ["tangerine"]
}).with_limit(1).do()

print(response["data"]["Get"]["Vocabulary"])

输出示例

[
    {
        "word": "orange",
        "description": "橙色柑橘类水果,富含维生素C",
        "category": "fruit"
    }
]

关键说明

  • 默认情况下,Weaviate会对所有字符串属性生成向量,若需指定仅特定字段参与向量计算,可在Schema的vectorizer配置中添加vectorizePropertyNames参数限定字段
  • 额外字段可按需任意扩展,不会影响语义匹配逻辑,查询时按需指定返回字段即可

内容的提问来源于stack exchange,提问作者user20305852

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:47:20