MongoDB Text Search

韩瑶
• 阅读 2093

简介

MongoDB支持一段内容的文本查询。为了执行这一运算,MongoDB使用了 text index 和 $text
运算符。需要注意的是,Views视图不支持 text search。

例子

这一个例子将会展示如何创建一个 text index 和如何使用它去查找 ‘coffee shops’, 在给定的只有文本字段里。首先创建一个 collection stores。

db.stores.insert(
   [
     { _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" }
   ]
)

Text Index 文本索引

MongoDB 提供文本索引来支持文本查询请求在一串内容里,文本索引可以包含任意字段 只要它的值是一个string 或者 一个 string 元素的 array。
为了执行文本查询请求,你必须有一个文本索引在你的 collection里。一个 collection 只能有一个文本查询索引,但是那一个索引可以覆盖多个字段。
例如你可以运行下面的代码,可以操作文本查询在 name 和 description 字段之上。

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

使用 $text 请求运算符去执行文本查询在一个 collection里通过文本索引。
直接用例子来解释了。
这个语句就是去查找所有stores包含任意关键词在[‘coffee’, 'shop','java']中

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

精准短语

通过包装他们在双引号里

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

排除某一项

在关键词前加 - 符号。只查找 “java” 和 “shop”,不包含 “coffee”

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

排序

MongoDB将会它的返还默认是未排序的。但是文本查询请求将会计算相关的评分对每一个 document 即指定 document 与请求匹配的程度。
要想按照评分去排序,你必须显性地指出 $meta textScore字段并且根据他们来排序。

db.stores.find(
   { $text: { $search: "java coffee shop" } },
   { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
Text search is also available in the aggregation pipeline.

原文:https://docs.mongodb.com/manu...

欢迎加入学习交流群569772982,大家一起学习交流。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
thinkphp3.2.3模板渲染支持三元表达式
thinkphp3.2.3模板渲染支持三元表达式{$status?'正常':'错误'}{$info'status'?$info'msg':$info'error'}注意:三元运算符中暂时不支持点语法。如下:           <divclass"modalhidefade"id'myModa
Stella981 Stella981
3年前
Spring Boot (八)MyBatis + Docker + MongoDB 4.x
一、MongoDB简介1.1MongoDB介绍MongoDB是一个强大、灵活,且易于扩展的通用型数据库。MongoDB是C编写的文档型数据库,有着丰富的关系型数据库的功能,并在4.0之后添加了事务支持。随着存储数据量不断的增加,开发者面临一个困难:如何扩展数据库?而扩展数据库分为横向扩展和纵向扩展,纵向扩展就
Wesley13 Wesley13
3年前
MongoDB数据库操作
MongoDB是一个面向文档的数据库系统.使用c编写,不支持sql.但有自己功能强大的查询语法.MongoDB使用BSON作为数据存储和传输的格式,BSON是一种类似JSON的二进制序列化文档,支持嵌套对象和数组.MongoDB很像mysql,document对应mysql的row,collection对应mysql的table应用场景:
Stella981 Stella981
3年前
JavaScript Prototype
定义和用法prototype属性使您有能力向对象添加属性和方法。实例在本例中,将展示如何使用prototype属性来向对象添加属性:<scripttype"text/javascript"functionemployee(name,job,born){this.n
Stella981 Stella981
3年前
Spring Boot 与 Kotlin 使用MongoDB数据库
我们在产品中用到NoSQL数据库MongoDB。下面就来简单介绍一下MongoDB,并且通过一个例子来介绍SpringBoot中对MongoDB访问的配置和使用。MongoDB简介MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(
Stella981 Stella981
3年前
Python 运算符
Python运算符什么是运算符?本章节主要说明Python的运算符。举个简单的例子459。例子中,4和5被称为操作数,""称为运算符。Python语言支持以下类型的运算符:算术运算符(https://www.oschina.n
Wesley13 Wesley13
3年前
Java访问MongoDB例子
publicstaticvoidmain(Stringargs)throwsException{MongomnewMongo("10.18.96.160",27017);System.out.println(m.getDatabaseNames());
Stella981 Stella981
3年前
Node.js 使用 MongoDB 的 ObjectId 作为查询条件
当往MongoDB中插入一条数据时,会自动生成ObjectId作为数据的主键。那么如何通过ObjectId来做数据的唯一查询呢?在MongoDB中插入一条数据在MongoDB中插入一条如下结构的数据:{_id:5d6a32389c825e24106624e4,title:'
小万哥 小万哥
1年前
数据库操作入门:PyMongo 和 MongoDB 的基本用法
MongoDBMongoDB是一种流行的NoSQL数据库,它将数据存储在类似JSON的文档中,使数据库非常灵活和可扩展PyMongoPython需要一个MongoDB驱动程序来访问MongoDB数据库。在本教程中,我们将使用MongoDB驱动程序"PyMo
小万哥 小万哥
1年前
学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程
Python可以用于数据库应用程序。最流行的NoSQL数据库之一是MongoDBMongoDBMongoDB将数据存储在类似JSON的文档中,使数据库非常灵活和可扩展。您可以在上下载免费的MongoDB数据库PyMongoPython需要一个MongoDB
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(