测试es向量检索
#需要注意该版本部分功能(rrf)收费,可申请30天试用
#测试阶段可以修改dims参数来测试
#拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.11.1
#启动命令
docker run -d --name elasticsearch \-p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e "xpack.security.enabled=false" \docker.elastic.co/elasticsearch/elasticsearch:8.11.1
#创建索引
PUT my_vector_index
{"mappings": {"properties": {"title": { // 存储原始文本"type": "text"},"title_vector": { // 存储对应的向量"type": "dense_vector","dims": 384, // 必须与你生成的向量维度一致"index": true, // 启用 ANN 索引"similarity": "cosine" // 使用余弦相似度}}}
}
#写入文档
POST my_vector_index/_doc
{"title": "The quick brown fox jumps over the lazy dog","title_vector": [0.125, -0.056, 0.987, ...] // 这里替换为真实的 384 维向量
}
#进行向量搜索
GET my_vector_index/_search
{"knn": {"field": "title_vector", // 指定向量字段"query_vector": [0.125, -0.056, 0.987, ...], // 将你的查询词(如 “animal”)也转换为向量"k": 10, // 返回最相似的 10 个结果"num_candidates": 100 // 从每个分片中选取的候选数量,越大越准但越慢}
}
#将向量搜索和传统搜索结合
GET my_vector_index/_search
{"query": {"match": {"title": "quick fox" // 传统关键词查询}},"knn": {"field": "title_vector","query_vector": [-0.123, 0.045, 0.888, ...], // 语义查询"k": 10,"num_candidates": 100},"rank": {"rrf": { // 使用 Reciprocal Rank Fusion 算法合并两次搜索的结果"window_size": 50,"rank_constant": 20}}
}
#申请rrf免费30天体验
POST /_license/start_trial?acknowledge=true