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

embedded/2024/9/23 16:15:02/

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

效果如下:


http://www.ppmy.cn/embedded/7798.html

相关文章

【JavaWeb】Day51.Mybatis动态SQL

什么是动态SQL 在页面原型中,列表上方的条件是动态的,是可以不传递的,也可以只传递其中的1个或者2个或者全部。 而在我们刚才编写的SQL语句中,我们会看到,我们将三个条件直接写死了。 如果页面只传递了参数姓名name 字…

springboot日志使用 SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

还是直接上代码 Slf4j 这玩意 默认支持 不用引入 yml 配置文件 # 日志配置 如果配置了xml 这个就不生效了 xml优先级最高 #logging: # file: # path: /home/logs # 日志目录地址 # name: /home/logs/skeleton.log # max-size: 1KB # 设置日志大小的最大大小 1…

J8 inceptionv1

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 卷积神经网络大家族中有很多经典的网络,前面已经学习resnet,densenet相关网络,今天学习一种更久远的一种网络GoogLenet 网络结构…

Python编程:高效数据处理与自动化任务实践

一、引言 Python,作为一种解释型、交互式、面向对象的编程语言,凭借其简洁易懂的语法和强大的功能库,已经成为数据科学、机器学习、Web开发等多个领域的首选工具。本文将探讨Python在数据处理和自动化任务方面的应用,通过具体的代…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(TcpServer板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现⾼并发服务器(TcpServer板块) 一、思路图二、模式关系图三、定时器的设计1、Linux本身给我们的定时器2、我们自己实现的定时器(1)代码部分(2)思…

【C++入门】内存管理

目录 C内存区域划分 C内存管理方式 new delete operator new和operator delete new和delete的实现原理 定位new malloc/free和new/delete的区别 C内存区域划分 1)栈,又叫堆栈,存放非静态局部变量、函数参数、返回值等,栈…

无损以太网的ROCE革命,队列的缓存空间优化分析

ROCE无损以太网,队列的缓存空间优化 多级缓存架构优化芯片性能:* 缓存空间细分为芯片级、端口级和队列级,实现精细管理。* 无损队列引入Headroom缓存空间,确保数据完整性。 在芯片层面: 静态缓存为端口提供保证的缓存空…

设计模式-观察者模式

概述 观察者设计模式(Observer Design Pattern)是一种行为型设计模式,它主要用于解决对象间的一对多依赖问题,当一个对象的状态发生改变时,所有依赖于它的对象都能得到通知并自动更新状态,无需显式调用。该…