当前位置:   article > 正文

ElasticSearch中使用向量和关键词联合检索_elasticsearch 城市名称 向量

elasticsearch 城市名称 向量

注:案例测试数据及其索引构建详见:ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一)-CSDN博客 中的第三部分。

假设任务场景为:用“新疆”向量检索相关的数据,同时需要匹配关键词“巴州”。

首先获取“新疆”的bge-large-zh-v1.5向量:

  1. POST _ml/trained_models/bge-large-zh-v1.5/_infer
  2. {
  3. "docs": [
  4. {
  5. "text_field": "新疆"
  6. }
  7. ]
  8. }

结果如下:

直接根据“新疆”向量查询

  1. GET article_embeddings/_search
  2. {
  3. "query": {
  4. "knn": {
  5. "field": "text_embedding.predicted_value",
  6. "num_candidates": 10,
  7. "query_vector": [
  8. -0.03627504035830498,
  9. -0.007771393284201622,
  10. 0.036312565207481384,
  11. 此处省略若干值
  12. ]
  13. }
  14. }
  15. }

默认返回所有的数据,且编号002的文档排在003前面。

如果我们想让包含关键词“巴州”的003文档排在002的前面,可以采用加filter的方式:

编写相应语句:

  1. GET article_embeddings/_search
  2. {
  3. "knn": {
  4. "field": "text_embedding.predicted_value",
  5. "num_candidates": 10,
  6. "filter": {
  7. "match": {
  8. "title": "巴州"
  9. }
  10. },
  11. "query_vector": [
  12. -0.03627504035830498,
  13. -0.007771393284201622,
  14. 0.036312565207481384,
  15. 此处省略若干值
  16. ]
  17. }
  18. }

结果如下:

此时发现最终只剩一条满足title中有“巴州”的文档了。

如果只是想把含有“巴州”的文档提前,不过滤,则可以采用如下的方式:

  1. GET article_embeddings/_search
  2. {
  3. "query": {
  4. "match": {
  5. "title": "巴州"
  6. }
  7. },
  8. "knn": {
  9. "field": "text_embedding.predicted_value",
  10. "num_candidates": 10,
  11. "query_vector": [
  12. -0.03627504035830498,
  13. -0.007771393284201622,
  14. 0.036312565207481384,
  15. 此处省略若干值
  16. ]
  17. }
  18. }

效果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/495013
推荐阅读
相关标签
  

闽ICP备14008679号