关于weaviate的关键词和向量搜索优劣
模式 | 搜索逻辑 | 适合场景 |
---|---|---|
向量搜索 | 语义匹配,靠向量距离 | 表达相似但用词不同(如同义句) |
关键词搜索 | 字面匹配,靠关键词命中 | 用户输入的是“关键词”或短语 |
举例对比:
记忆内容:
“Java 架构师的名字是 Tom。”
用户查询:
-
“谁是架构师?”
→ 向量搜索能命中(意思接近)
→ 关键词搜索完全没命中 -
“Tom” / “架构师” / “Java”
→ 关键词能命中(文本含词)
→ 向量搜索反而未必命中(向量分数太低)
为什么“向量可能搜不到关键词命中内容”?
因为向量搜索是“语义空间”的距离:
-
如果用户输入的词非常简短或抽象(如“好”、“人名”、“单字”)
-
或者模型 embedding 不够准确
-
或者你用了
certainty > 0.85
做了剪枝
就会出现:语义向量搜不到,字面却包含关键词的情况
关键词 fallback 就是为这种“精确小词匹配”兜底设计的
-
向量搜索负责“语义相关”
-
关键词搜索负责“精确命中”
两者结合:即使 embedding 模型不够完美、内容风格多变,也能最大限度保证记忆被找回来。