当前位置: 首页 > news >正文

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"}})

相关文章:

  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • html从零开始8:css3新特性、动画、媒体查询、雪碧图、字体图标【搬代码】
  • 【C语言】指针练习篇(下),深入理解指针---指针练习题【图文讲解,详细解答】
  • Python循环语句——for循环的嵌套使用
  • Java学习第十六节之创建对象内存分析和小结类与对象
  • Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL
  • Godot 游戏引擎个人评价和2024年规划(无代码)
  • QtApplets-线程池
  • MinGW/MSYS/GCC/GNU/MSVC/Clang/LLVM都是什么
  • 防火墙HA详解
  • 问题:内存时序参数 CASLatency 是() #学习方法#微信#微信
  • 防御保护--内容安全过滤
  • C++ 音视频原理
  • 跟着pink老师前端入门教程(JavaScript)-day02
  • OpenAl 视频生成模型 —— Sora技术报告解读
  • [LeetCode] Wiggle Sort
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • JavaScript的使用你知道几种?(上)
  • js学习笔记
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Lsb图片隐写
  • vue脚手架vue-cli
  • XForms - 更强大的Form
  • 闭包--闭包作用之保存(一)
  • 讲清楚之javascript作用域
  • 离散点最小(凸)包围边界查找
  • 前端之React实战:创建跨平台的项目架构
  • 软件开发学习的5大技巧,你知道吗?
  • 使用 Docker 部署 Spring Boot项目
  • 思考 CSS 架构
  • 算法-插入排序
  • 小程序开发之路(一)
  • 一天一个设计模式之JS实现——适配器模式
  • #大学#套接字
  • (1)虚拟机的安装与使用,linux系统安装
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (LeetCode C++)盛最多水的容器
  • (Python第六天)文件处理
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)计算机毕业设计大学生兼职系统
  • (离散数学)逻辑连接词
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • **PHP二维数组遍历时同时赋值
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .pyc文件是什么?
  • ??myeclipse+tomcat
  • @基于大模型的旅游路线推荐方案
  • [Android] 修改设备访问权限
  • [Angular] 笔记 7:模块
  • [BUG] Authentication Error
  • [BZOJ1053][HAOI2007]反素数ant