#需要注意该版本部分功能(rrf)收费,可申请30天试用
#测试阶段可以修改dims参数来测试
#拉取镜像
bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.11.1
#启动命令
bash
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
#创建索引
java
PUT my_vector_index
{
"mappings": {
"properties": {
"title": { // 存储原始文本
"type": "text"
},
"title_vector": { // 存储对应的向量
"type": "dense_vector",
"dims": 384, // 必须与你生成的向量维度一致
"index": true, // 启用 ANN 索引
"similarity": "cosine" // 使用余弦相似度
}
}
}
}
#写入文档
java
POST my_vector_index/_doc
{
"title": "The quick brown fox jumps over the lazy dog",
"title_vector": [0.125, -0.056, 0.987, ...] // 这里替换为真实的 384 维向量
}
#进行向量搜索
java
GET my_vector_index/_search
{
"knn": {
"field": "title_vector", // 指定向量字段
"query_vector": [0.125, -0.056, 0.987, ...], // 将你的查询词(如 "animal")也转换为向量
"k": 10, // 返回最相似的 10 个结果
"num_candidates": 100 // 从每个分片中选取的候选数量,越大越准但越慢
}
}
#将向量搜索和传统搜索结合
java
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天体验
java
POST /_license/start_trial?acknowledge=true