ElasticSearch中使用向量和关键词联合检索

注:案例测试数据及其索引构建详见: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,
      此处省略若干值
    ]
  }
}

效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值