广告
返回顶部
首页 > 资讯 > 数据库 >MongoDB之索引(全文索引)
  • 667
分享到

MongoDB之索引(全文索引)

2024-04-02 19:04:59 667人浏览 安东尼
摘要

在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是在某个字段上实现的模糊查询,但是这个时候返回的信息并不会很准确,因为只能够查A字段或者是B字段,而在mongoDB里面实现了非常简单的全文检索。

在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是在某个字段上实现的模糊查询,但是这个时候返回的信息并不会很准确,因为只能够查A字段或者是B字段,而在mongoDB里面实现了非常简单的全文检索。

范例:定义一个新的集合
db.news.insert({"title":"stoneA","content":"ttA"});
db.news.insert({"title":"stoneB","content":"ttB"});
db.news.insert({"title":"stoneC","content":"ttC"});
db.news.insert({"title":"stoneD","content":"ttD"});

范例:创建全文索引
> db.news.createIndex({"title":"text","content":"text"});
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}

范例:实现数据的模糊查询
如果要想表示出全文检索,则使用“$text"判断符,而要想进行数据的查询则使用“$search”运算符:
  ● 查询指定的关键字:{"$search":"查询关键字"}
  ● 查询多个关键字(或关系):{"$search":"查询关键字 查询关键字 ..."}
  ● 查询多个关键字(与关系):{"$search":"\"查询关键字\" \"查询关键字\" ..."}
  ● 查询多个关键字(排除某一个):{"$search":"查询关键字 查询关键字 ...-排查关键字"}

范例:查询单个内容
> db.news.find({"$text":{"$search":"stoneA"}})
{ "_id" : ObjectId("5992c4310184ff511bf02bbb"), "title" : "stoneA", "content" : "ttA" }

范例:查询包含有“stoneA”和“stoneB”的信息
> db.news.find({"$text":{"$search":"stoneA stoneB"}})
{ "_id" : ObjectId("5992c4310184ff511bf02bbc"), "title" : "stoneB", "content" : "ttB" }
{ "_id" : ObjectId("5992c4310184ff511bf02bbb"), "title" : "stoneA", "content" : "ttA" }

范例:查询同时包含有“ttC”和“ttD”
> db.news.find({"$text":{"$search":"\"ttC\" \"ttD\""}})
{ "_id" : ObjectId("5992c61d0184ff511bf02bc1"), "title" : "stoneC", "content" : "ttC ttD ttE" }
{ "_id" : ObjectId("5992c61d0184ff511bf02bc2"), "title" : "stoneD", "content" : "ttC ttD ttF" }

范例:查询包含有“ttE”但是不包含“ttF”
> db.news.find({"$text":{"$search":"ttE -ttF"}})
{ "_id" : ObjectId("5992c61d0184ff511bf02bc1"), "title" : "stoneC", "content" : "ttC ttD ttE" }

但是在进行全文检索操作的时候还可以使用相似度的打分来判断检索结果。

范例:为查询结果打分
> db.news.find({"$text":{"$search":"ttC ttD ttE"}},{"score":{"$meta":"textScore"}}).sort({"score":{"$meta":"textScore"}})
{ "_id" : ObjectId("5992c61d0184ff511bf02bc1"), "title" : "stoneC", "content" : "ttC ttD ttE", "score" : 2 }
{ "_id" : ObjectId("5992c61d0184ff511bf02bc2"), "title" : "stoneD", "content" : "ttC ttD ttF", "score" : 1.3333333333333333 }

按照打分的成绩进行排列,实际上就可以实现更加准确的信息搜索。
如果一个集合的字段太多了,那么每一个字段都分别设置全文索引比较麻烦,简单一些,可以为所有字段设置全文索引。

范例:为所有字段设置全文索引
> db.news.dropIndexes()
{
        "nIndexesWas" : 2,
        "msg" : "non-_id indexes dropped for collection",
        "ok" : 1
}
> db.news.createIndex({"$**":"text"});
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}
这是一种最简单的设置全文索引的方式,但是尽可能别用,会慢。

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB之索引(全文索引)

本文链接: https://www.lsjlt.com/news/48770.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB之索引(全文索引)
    在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是在某个字段上实现的模糊查询,但是这个时候返回的信息并不会很准确,因为只能够查A字段或者是B字段,而在MongoDB里面实现了非常简单的全文检索。 ...
    99+
    2022-10-18
  • mongodb索引
    索引的原理当往某各个集合插入多个文档后,每个文档在经过底层的存储引擎持久化后,会有一个位置信息,通过这个位置信息,就能从存储引擎里读出该文档 MMAPv1:文件id+文件内offset WiredTiger...
    99+
    2022-10-18
  • 浅谈索引系列之本地索引与全局索引
    分区表按照类型可以分为范围分区(Range)、列表分区(List)以及哈希分区(Hash),表被分区后,其对应的索引也会与普通表的索引有所不同。 基本概念    &nb...
    99+
    2022-10-18
  • MySQL---单列索引(包括普通索引、唯一索引、主键索引)、组合索引、全文索引。
    1. 索引 索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索 引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的 时间就越多,如果表中查询的列有一个索引,MySQL...
    99+
    2023-09-21
    数据库 mysql sql
  • SQL Server 全文搜索/全文索引
    全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询。全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中。全文索引是一种特殊类型的基于标记的功能性索引,它是由 SQL Server 全文引...
    99+
    2014-12-30
    SQL Server 全文搜索/全文索引
  • MongoDB的索引
    1、简介它就像是一本书的目录,如果没有它,我们就需要对整个书籍进行查找来获取需要的结果,即所说的全盘扫描;而有了目录(索引)之后就可以通过它帮我们定位到目标所在的位置,快速的获取我们想要的结果。2、演示第一...
    99+
    2022-10-18
  • MongoDB索引(7)
    索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧。 增加检索的效率. mongodb提供了索引的支持.(...
    99+
    2021-11-24
    MongoDB索引(7)
  • MongoDB(八):索引
    1. 索引 索引支持查询的有效地提高效率。没有索引,MongoDB必须扫描集合的每个文档,以选择与查询语句匹配的文档。这种扫描效率很低,需要MongoDB处理大量的数据。 索引是特殊的数据结构,以易于遍历的形式存储数据集的一小部分。 索引存...
    99+
    2017-05-14
    MongoDB(八):索引
  • [MongoDB] Index 索引
    ...
    99+
    2022-10-18
  • Mysql全文索引
    1.背景简介 项目开发过程有时候会遇到全文检索的需求,但是数据量有时候比较小,不属于高并发高吞吐场景,这种场景搭建ES服务有点浪费资源,也把工程设计复杂了,所以需要采用更简单更廉价的方案。一般业务系统都会用到Mysql或者PostgreSQ...
    99+
    2023-08-18
    mysql 数据库 全文检索
  • mysql 全文索引
    停止词(stopword) ...
    99+
    2022-10-18
  • mongodb 索引相关
    1.索引的相关介绍:monggodb的索引也是一颗平衡二叉树,所以在传统数据库中的绝大部分的索引优化技术也是可用的.注意:mongodb可以在任意方向上对数据进行遍历(这点和关系数据库中的索引不一样),但这...
    99+
    2022-10-18
  • mongodb建索引引起的问题
    建索引就是一个容易引起长时间写锁的问题,MongoDB 在前台建索引时需要占用一个写锁(而且不会临时放弃),如果集合的数据量很大,建索引通常要花比较长时间,特别容易引起问题。 解决的方法很简单,M...
    99+
    2022-10-18
  • MongoDB笔记九——索引
    制造数据...
    99+
    2022-10-18
  • mysql之索引
      哪些情况需要创建索引 主键自动建立唯一索引 频繁作为查询条件的字段应该创建索引(where 后面的语句) 查询中与其它表关联的字段,外键关系建立索引 单键/组合...
    99+
    2016-10-12
    mysql之索引
  • SQL之索引
    创建一张表:    QString querystr;     querystr="create tabl...
    99+
    2022-10-18
  • 5. 索引与算法—B+树的操作、辅助索引与聚集索引、Cardinality、联合索引、覆盖索引、MRR/ICP、哈希算法、全文索引
    5.3 B+ 树 B+ 树是为磁盘或其他直接存储辅助设备设计的一种平衡查找树。在B+树中,所有记录都是按照键值大小顺序存放在同一层的叶子节点上,由叶子节点指针进行连接,双向链表连接。 5.3.1 B+ 树的插入操作 考虑一下三种情...
    99+
    2015-09-03
    5. 索引与算法—B+树的操作 辅助索引与聚集索引 Cardinality 联合索引 覆盖索引 MRR/ICP 哈希算法 全文索引
  • 搜索引擎之倒排索引浅析
    上一篇文章 ElasticSearch 术语中提到了倒排索引,那么这篇文章就来讲解下什么是倒排索引,倒排索引的数据结构以及 ElasticSearch 中的倒排索引。 倒排索引 倒排索引(Inverted Index) 也常被称为...
    99+
    2016-11-02
    搜索引擎之倒排索引浅析
  • Elasticsearch之倒排索引及索引操作
    目录倒排索引一 倒排索引是什么二 举例三 倒排索引待解决的问题索引操作一 索引初始化二 查询索引配置三 更新索引四 删除索引倒排索引 一 倒排索引是什么 倒排索引源于实际应用中需要根...
    99+
    2022-11-10
  • mysql索引(覆盖索引,联合索引,索引下推)
    目录什么是索引?索引的实现方式innodb的索引模型索引维护覆盖索引联合索引索引下推什么是索引? 当我们使用汉语字典查找某个字时,我们会先通过拼音目录查到那个字所在的页码,然后直接翻到字典的那一页,找到我们要查的字,通过...
    99+
    2022-08-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作