标签 向量搜索 下的文章

前言

  • 本文对 Elasticsearch 8.19 适用
  • 在 Elasticsearch 8.19 中,混合搜索(Hybrid Search)主要有两种核心策略

    kNN + Query 组合搜索(通常指线性加权融合)
    RRF(Reciprocal Rank Fusion)搜索
  • 截至 2026.1.21, RRF 功能在 Elasticsearch 8.19 中属于收费功能

正文

  • Elasticsearch 向量搜索通常使用 dense_vector 数据类型
  • Elasticsearch 向量搜索通常使用 kNN 搜索
  • 基本的 kNN 搜索示例 k-nearest neighbor (kNN) search

    POST byte-image-index/_search
    {
      "knn": {
          "field": "byte-image-vector",
          "query_vector": [-5, 9],
          "k": 10,
          "num_candidates": 100
      },
      "fields": ["title"]
    }
  • kNN 中使用 filter 过滤

    POST image-index/_search
    {
      "knn": {
          "field": "image-vector",
          "query_vector": [54, 10, -2],
          "k": 5,
          "num_candidates": 50,
          "filter": {
              "term": {"file-type": "png"}
          }
      },
      "fields": ["title"],
      "_source": false
    }
  • kNN 与 query 组合

    POST image-index/_search
    {
      "query": {
          "match": {
              "title": {
                  "query": "mountain lake",
                  "boost": 0.9
              }
          }
      },
      "knn": {
          "field": "image-vector",
          "query_vector": [54, 10, -2], 
          "k": 5,
          "num_candidates": 50,
          "boost": 0.1
      },
      "size": 10
    }
  • RRF 搜索示例

    GET example-index/_search
    {
      "retriever": {
          "rrf": { 
              "retrievers": [
                  {
                      "standard": { 
                          "query": {
                              "term": {
                                  "text": "shoes"
                              }
                          }
                      }
                  },
                  {
                      "knn": { 
                          "field": "vector",
                          "query_vector": [1.25, 2, 3.5],
                          "k": 50,
                          "num_candidates": 100
                      }
                  }
              ],
              "rank_window_size": 50,
              "rank_constant": 20
          }
      }
    }

相关阅读

本文出自 qbit snap

项目链接:GitHub - hsingjui/ContextWeaver: ContextWeaver 是一个基于 MCP 协议、利用 Tree-sitter 和向量搜索为大语言模型提供本地代码库智能上下文编织与检索的工具。

augment code 的账号太难注册了,注册了就封,从海鲜市场买别人注册好的号也是几天就封了,augment context engine 又很好用,只能试试看能不能做一个平替了

项目使用方式

  1. 安装
# 全局安装
npm install -g @hsingjui/contextweaver

# 或使用 pnpm
pnpm add -g @hsingjui/contextweaver
  1. 配置
# 初始化
contextweaver init
# 或者简写
cw init

#修改 `~/.contextweaver/.env`

EMBEDDINGS_API_KEY=your-api-key-here
EMBEDDINGS_BASE_URL=https://api.siliconflow.cn/v1/embeddings
EMBEDDINGS_MODEL=BAAI/bge-m3
EMBEDDINGS_MAX_CONCURRENCY=10
EMBEDDINGS_DIMENSIONS=1024

RERANK_API_KEY=your-api-key-here
RERANK_BASE_URL=https://api.siliconflow.cn/v1/rerank
RERANK_MODEL=BAAI/bge-reranker-v2-m3
RERANK_TOP_N=20

这里 EmbeddingReranker 模型用的硅基流动免费的模型,用 Qwen/Qwen3-Embedding-8BQwen/Qwen3-Reranker-8B,效果好一些,但是速度会慢一点

  1. 索引代码库
#这一步不是必须的,使用mcp搜索的时候,如果没有索引代码库会自动索引 # 在代码库根目录执行
contextweaver index

# 指定路径
contextweaver index /path/to/your/project

# 强制重新索引
contextweaver index --force
  1. 使用 mcp
{
  "mcpServers": {
    "contextweaver": {
      "command": "contextweaver",
      "args": ["mcp"]
    }
  }
}

claude code 使用

claude mcp add contextweaver -- command contextweaver mcp

这是项目的工作流程

下面是图一乐的用 claude codenew-api 的仓库对比 aceContextWeaver 的结果,仅供参考
使用的 prompt

任务:对比 Ace 和 ContextWeaver 在当前项目中的 Codebase Retrieval (代码库检索) 效果。
请执行以下步骤进行 A/B 测试:
设定三个测试问题:使用问题 "[请在此处填入具体的复杂技术问题,例如:如何修改鉴权逻辑以支持JWT?]" 作为基准。
分别检索:
场景 A (Ace):调用 Ace 的检索能力,列出其提取的关键文件和代码片段。
场景 B (ContextWeaver):调用 ContextWeaver 的检索能力,列出其提取的关键文件和代码片段。
对比分析:请基于以下维度创建一个对比表格:
相关性 (Precision):检索到的文件是否直接解决了问题?是否有核心文件遗漏?
噪音干扰 (Noise):是否包含了大量无关的测试文件或通用配置?
上下文完整度 (Context):是否提供了足够的上下文(如引用链路、类型定义)来理解代码?
结论:基于当前项目的代码结构,通过三个测试问题,指出哪一个工具的检索策略更优。

📌 转载信息
原作者:
hsingjui
转载时间:
2025/12/29 15:10:29