注:案例测试数据及其索引构建详见:ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一)-CSDN博客 中的第三部分。
假设任务场景为:用“新疆”向量检索相关的数据,同时需要匹配关键词“巴州”。
首先获取“新疆”的bge-large-zh-v1.5向量:
POST _ml/trained_models/bge-large-zh-v1.5/_infer
{"docs": [{"text_field": "新疆"}]
}
结果如下:
直接根据“新疆”向量查询
GET article_embeddings/_search
{"query": {"knn": {"field": "text_embedding.predicted_value","num_candidates": 10,"query_vector": [-0.03627504035830498,-0.007771393284201622,0.036312565207481384,此处省略若干值]}}
}
默认返回所有的数据,且编号002的文档排在003前面。
如果我们想让包含关键词“巴州”的003文档排在002的前面,可以采用加filter的方式:
编写相应语句:
GET article_embeddings/_search
{"knn": {"field": "text_embedding.predicted_value","num_candidates": 10,"filter": {"match": {"title": "巴州"}},"query_vector": [-0.03627504035830498,-0.007771393284201622,0.036312565207481384,此处省略若干值]}
}
结果如下:
此时发现最终只剩一条满足title中有“巴州”的文档了。
如果只是想把含有“巴州”的文档提前,不过滤,则可以采用如下的方式:
GET article_embeddings/_search
{"query": {"match": {"title": "巴州"}},"knn": {"field": "text_embedding.predicted_value","num_candidates": 10,"query_vector": [-0.03627504035830498,-0.007771393284201622,0.036312565207481384,此处省略若干值]}
}
效果如下: