Mongodb 文本检索

Mongodb支持对字符串字段的文本检索。在Mongodb atlas中, 对这种文本检索的功能进行了增强。 提到文本检索, 难免不会想到实现非常火爆的AI, 聊天服务等时髦技术。mongodb提供的这种文本检索功能+适当的算法实践,似乎可以支持这些应用场景。

本文研究Mongodb文本检索文档,整理出在本地Mongo数据库中使用文本检索的方法和注意事项。

文本检索

执行文本检索前,用户需要在执行检索的集合建立文本索引。mongodb通过为文字内容建立文本索引的方式支持文本检索。文本索引可以包含任何字符串字段或字符串数组字段。一个mongodb集合中,只能有一个文本索引,但文本索引中可以包含多个字段。

mongodb的普通查询和聚合查询,都支持文本检索。

应用举例

创建测试集合

创建一个stores集合, 包括name, description两个字符串字段

db.stores.insertMany([{ _id: 1, name: "Java Hut", description: "Coffee and cakes" },{ _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },{ _id: 3, name: "Coffee Shop", description: "Just coffee" },{ _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },{ _id: 5, name: "Java Shopping", description: "Indonesian goods" }
])

添加文本索引

db.stores.createIndex( {name: "text", description: "text"})

精确查询

使用双引号,将查询文字包起来,进行精确查询。

db.stores.find( {$text: {$search: "\"coffee shop\""}})

当没有\转义时,查询包含coffee或包含shop的文档记录。下面查询语句中mongodb使用空格,将查询条件的coffee和shop分开,进行or查询。同样,mongodb也会对其他标点符号进行差分,拆分出多个字符串,进行or查询。

db.stores.find( {$text: {$search: "coffee shop"}})

排除字符串

使用符号“-”, 排除包含字符串的文档。如查询字符串中包含java或包含shop但不包含coffee的文档

db.stores.find({$text: {$search: "java shop -coffee"}})

排序

使用文本检索查询时,mongodb返回没有排序的结果。但mongodb支持使用其内部计算出来的匹配分数来进行排序。使用{$meta: "textScore"}获取文档与查询条件中的匹配分数。

db.stores.find({$text: {$search: "java coffee shop"}
}, {score: {$meta: "textScore"}
}).sort( {score: {$meta: "textScore"}})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】SpringBoot框架开发服装店库存管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

VTK Python PyQt 监听键盘 控制 Actor 移动 变色

KeyPressInteractorStyle 在vtk 中有时我们需要监听 键盘或鼠标做一些事; 1. 创建 Actor; Sphere vtk.vtkSphereSource() Sphere.SetRadius(10)mapper vtk.vtkPolyDataMapper() mapper.SetInputConnection(Sphere.GetOutputPort()) actor vtk.vtkAc…

JSON转换List<Map<String, Object>>、Map<String, Object>

废话就不说了 早上10点研究到现在 获取redis的JSON字符串 String getPalletListNew redisService.getRedis(“getPalletListNew”, abroad “” goodsLevel “” startPort “” destinationPort “” maxTon “” minTon); 转换Map<String,Object> public …

找数字

题目描述 已知两个正整数 a&#xff0c;b 。现有一个大于 1 的整数 x &#xff0c;将其作为除数分别除 a&#xff0c;b 得到的余数相同。 请问满足上述条件的 x 的最小值是多少&#xff1f;数据保证 x 有解。 输入 共一行&#xff0c;两个整数 a , b 。 输出 输出这个最小…

立创EDA专业版快速使用和一些快捷键

立创EDA专业版 介绍原理图PCB快捷键原理图PCB 介绍 器件 符号 封装 3D模型 属性 仅支持放置器件在原理图或PCB 一个Board(板&#xff09;只能有一个原理图和PCB&#xff0c;一个原理图可以有多页 原理图 网络标签 是给连接线命名 新建图页 如果一个图页上画不下&#…

第4讲 小程序首页实现

首页 create.vue <template><view class"vote_type"><view class"vote_tip_wrap"><text class"type_tip">请选择投票类型</text><!-- <text class"share">&#xe739;分享给朋友</text&g…

嵌入式开发之SQLite数据库

SQLite是一种轻量级的嵌入式关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一个开源项目&#xff0c;实现了自包含、零配置、无服务器的特性。以下是SQLite的详细介绍&#xff1a; SQLite特点 轻量级&#xff1a;SQLite的代码库极其精简&#xff0c;不需…

STM32中断定时器的使用

使用systimer来产生较为精确的定时&#xff0c;之前使用for循环来产生。 用示例工程时产生错误&#xff0c;原因是调用F103的3种容量器件&#xff0c;需要更换S汇编头函数。 另外在工程设置中&#xff0c;需要把HD设置为MD&#xff0c;重新编译即可成功。

二叉树基础总结

目录 树的定义&#xff1a; 深度和高度&#xff1a; 二叉树 由来 二叉树种类&#xff1a; 满二叉树&#xff1a; 完全二叉树&#xff1a; 严格二叉树&#xff08;Strict Binary Tree&#xff09;&#xff1a; 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;…

DoRA(权重分解低秩适应):一种新颖的模型微调方法

来自&#xff1a;小互 DoRA&#xff08;权重分解低秩适应&#xff09;&#xff1a;一种新颖的模型微调方法 DoRA在LoRA的基础上进一步发展&#xff0c;通过将预训练权重分解为“幅度”和“方向”两个部分进行微调。 这种权重分解方法允许DoRA更精细地控制模型的学习过程&…

如何将shape数据 导入到Postgresql数据库中(单个和批量)

一. 背景 很多时候我们需要将shape数据导入到Postgresql数据库&#xff0c;将数据db化。 本文主要讲解三种方式&#xff1a; 使用QGIS工具导入&#xff08;单个&#xff09;、使用postgresql2 命令工具导入&#xff08;单个&#xff09;、使用python脚本批量导入shape数据&…

基于函数计算AIGC生成图应用

目录 基于函数计算部署AIGC应用的主要步骤 创建Stable Diffusion模型的应用 访问应用实现文字生图 函数的查看与管理 基于函数计算部署AIGC应用的主要步骤 用函数计算实现AIGC只要简单的三步&#xff0c;分别是创建应用、运行应用及查看管理。 创建Stable Diffusion模型的应…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(3)数据准备和数据预处理

项目开始&#xff0c;首先要进行数据准备和数据预处理。 数据准备的核心是找到这些数据&#xff0c;观察数据的问题。 数据预处理就是去掉脏数据。 缺失值的处理&#xff0c;格式转换等。 延伸学习&#xff1a; 在人工智能&#xff08;AI&#xff09;的众多工作流程中&#…

浏览器url地址栏空格变+号

问题描述&#xff0c;后台返回一个参数携带在url上面&#xff0c;发的时候是空格隔开的字符串&#xff0c;但是到了前端放到地址栏打开是一个号。 类似于 // 后台返回的url https://xxx.com?aaa bxxx // 打开浏览器后地址栏显示的 https://xxx.com?aaabxxx问了一下AI说是空…

k8s ipvs 模式下不支持 localhost:<nodeport>方式访问服务

简介 今天去定位一个nodeport的问题&#xff0c;发现curl 127.0.0.1:32000 访问nodeport的时候会规律的hang住&#xff0c;本来以为是后端服务的问题&#xff0c;但是curl管理ip:nodeport 是正常的。这个就奇怪了&#xff0c;深入研究了下发现 ipvs模式下是不支持这样访问的&a…

Python如何实现定时发送qq消息

因为生活中老是忘记各种事情&#xff0c;刚好又在学python&#xff0c;便突发奇想通过python实现提醒任务的功能&#xff08;尽管TIM有定时功能&#xff09;&#xff0c;也可定时给好友、群、讨论组发送qq消息。其工作流程是&#xff1a;访问数据库提取最近计划——>根据数据…

2024阿里云服务器配置怎么选择?c7、g7和r7?

阿里云服务器配置怎么选择合适&#xff1f;CPU内存、公网带宽和ECS实例规格怎么选择合适&#xff1f;阿里云服务器网aliyunfuwuqi.com建议根据实际使用场景选择&#xff0c;例如企业网站后台、自建数据库、企业OA、ERP等办公系统、线下IDC直接映射、高性能计算和大游戏并发&…

打开ps显示找不到dll怎么办?这四种方法可快速修复

在计算机操作系统中&#xff0c;当执行某程序或运行特定软件时&#xff0c;如果系统提示“ps显示找不到dll文件”&#xff0c;这其实是一个较为常见的问题现象。动态链接库&#xff08;DLL&#xff09;文件是Windows操作系统中不可或缺的重要组件&#xff0c;它包含了大量可被多…

IDEA实现序列化时如何自动生成serialVersionUID

实现步骤&#xff1a;1.安装GenerateSerialVersionUID插件 2.点击idea左上角File -> Settings -> Editor -> Inspections -> 搜索 Serialization issues &#xff0c;找到 Serializable class without ‘serialVersionUID’ ->打上勾&#xff0c;再点击Apply-&…

简单介绍数据结构的基本概念

数据结构的基本概念 常用术语 数据 数据&#xff08;Data&#xff09;是客观事物的符号表示&#xff0c;是所有能输入到计算机中并被计算机程序处理的符号的总称。例如&#xff1a;整数、字符串、图形、图像、声音和动画等 数据元素 数据元素&#xff08;Data Element&…