全文索引,也叫文本索引,平时,我们百度的搜索,比如api文档的搜索,这种全局的索引就可以使用全文索引实现
全文索引:对字符串与字符串数组创建全文可搜索对索引
使用情况:比如有一个数据集合,存储了用户的文章,用以下的数据结构存储,{author:'',title:'',article:''},这个数据结构有三个字段,这提供了全文索引的搜索
建立方法
全文索引的建立方法跟之前的单键索引,复合索引,比较相似
单键索引:db.articles.ensureIndex({key:'text'})
复合索引:db.articles.ensureIndex({key_1:'text',key_2:'text'})
全文索引:db.articles.ensureIndex({"$**":"text"})
全文索引中,我们可能存在不同的字段,比如api,比如问答,比如公告,mongod中存储的表结构是不固定的
创建全文索引
> db.articles.ensureIndex({'article':'text'})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : ,
"numIndexesAfter" : ,
"ok" :
}
成功后,我们看下如何使用全文查询,在这之前先插入几条简单的数据
db.articles.find({$text:{$search:'coffee'}})
db.articles.find({$text:{$search:'aa bb cc'}})
db.articles.find({$text:{$search:'aa bb -cc'}})
db.articles.find({$text:{$search:'"aa" "bb" "cc"'}})
使用全文索引跟使用其他索引不一样,我们不再需要字段的名字,而是直接使用$text,$search进行查询,这个时候有个问题,如果创建了两个全文索引,它查的是哪一个,这个问题在mongodb中不会发生,因为在mongodb中,每个数据集合只能创建一个全文索引
模糊查找包含某个字段
> db.articles.find({$text:{$search:'aa'}})
{ "_id" : ObjectId("5b638940be4539ecd263d2d2"), "author" : "luxun", "title" : "背影", "article" : "aa bb rr gg" }
{ "_id" : ObjectId("5b63893abe4539ecd263d2d1"), "author" : "luxun", "title" : "背影", "article" : "aa bb cc dd ee" }
{ "_id" : ObjectId("5b63894bbe4539ecd263d2d3"), "author" : "luxun", "title" : "背影", "article" : "aa bb hh oo dssd hlk" }
看到返回结构有三个包涵aa
我们查个只有第二个包含的
> db.articles.find({$text:{$search:'rr'}})
{ "_id" : ObjectId("5b638940be4539ecd263d2d2"), "author" : "luxun", "title" : "背影", "article" : "aa bb rr gg" }
可以看到只有第二条文档返回了

模糊查找多个字段

有时候我们查询时,关键词不只有一个,可能多个,在mongodb中,可以非常简单的将他们分开
> db.articles.find({$text:{$search:'aa bb cc'}})
{ "_id" : ObjectId("5b638940be4539ecd263d2d2"), "author" : "luxun", "title" : "背影", "article" : "aa bb rr gg" }
{ "_id" : ObjectId("5b63893abe4539ecd263d2d1"), "author" : "luxun", "title" : "背影", "article" : "aa bb cc dd ee" }
{ "_id" : ObjectId("5b63894bbe4539ecd263d2d3"), "author" : "luxun", "title" : "背影", "article" : "aa bb hh oo dssd hlk" }
我们看到都返回了,这里是或查询,包含aa或者包含bb,或者包含cc都会返回

不包含某个字段

有时候我们查询,想要不包含某个字符串,可以用负号
> db.articles.find({$text:{$search:'aa bb -cc'}})
{ "_id" : ObjectId("5b638940be4539ecd263d2d2"), "author" : "luxun", "title" : "背影", "article" : "aa bb rr gg" }
{ "_id" : ObjectId("5b63894bbe4539ecd263d2d3"), "author" : "luxun", "title" : "背影", "article" : "aa bb hh oo dssd hlk" }
可以看到,返回了两条,包含aa bb,但是不包含cc的数据

与查找

我们的aa bb cc是或的查找方式,有的时候我们想用与的方式查找,就需要将字符串用引号引起来
> db.articles.find({$text:{$search:'"aa" "bb" "cc"'}})
{ "_id" : ObjectId("5b63893abe4539ecd263d2d1"), "author" : "luxun", "title" : "背影", "article" : "aa bb cc dd ee" }
> db.articles.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}})
{ "_id" : ObjectId("5b63893abe4539ecd263d2d1"), "author" : "luxun", "title" : "背影", "article" : "aa bb cc dd ee" }
可以看到只返回一条包含aa bb cc的一条信息
 
 
 
 

mongodb索引 全文索引的更多相关文章

  1. mongodb索引 全文索引之相似度查询

    我们在百度搜索中,可以看到与自己搜索度内容越相关度,排在越前面,这个需求可以在mongodb中很简单度实现,mongodb的全文索引不仅可以返回相匹配的查询结果,而且可以告诉你查询结果与你的查询条件多 ...

  2. mongodb索引 全文索引使用限制

    全文索引非常强大,但是同样存在很多限制,我们来看以下去全文索引的使用限制: 1.每次查询,只能指定一个$text查询 2.$text查询不能出现在$nor查询中 之前没有接触过$nor查询,$nor查 ...

  3. MongoDB索引介绍

    MongoDB中的索引其实类似于关系型数据库,都是为了提高查询和排序的效率的,并且实现原理也基本一致.由于集合中的键(字段)可以是普通数据类型,也可以是子文档.MongoDB可以在各种类型的键上创建索 ...

  4. MongoDB索引的种类与使用

    一:索引的种类 1:_id索引:是绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段2:单键索引: 1.单键索引是最普通的索引 2.与_id索引不同,单键索 ...

  5. 【四】MongoDB索引管理

    一.索引介绍 在mongodb中,索引用来支持高效查询.如果没有索引,mongodb必须在整个集合中扫描每个文档来查找匹配的文档.但是如果建立合适的索引,mongodb就可以通过索引来限制检查的文档数 ...

  6. MongoDB的全文索引

    ​ Table of Contents 背景 如何使用 准备工作:插入数据 建立全局索引 查询结果 使用中存在哪些问题? 英文存在停止词 中文无法采用全文索引 前面了解了多种索引方式,比如单键索引,多 ...

  7. MongoDB索引的简单理解

    目录 MongoDB索引 1.语法准备 2.数据准备: 3.索引 3.1 唯一索引 3.2 单键索引 3.3 多键索引 3.4 复合索引 3.5 交叉索引 3.6 部分索引 3.7覆盖索引 3.8 全 ...

  8. [DataBase] MongoDB (7) MongoDB 索引

    MongoDB 索引 1. 建立索引 唯一索引db.passport.ensureIndex( {"loginname": 1}, {"unique": tru ...

  9. MongoDB(索引及C#如何操作MongoDB)(转载)

    MongoDB(索引及C如何操作MongoDB) 索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureInd ...

随机推荐

  1. 帝都Day4(3)——还是数据结构

    可并堆 左偏树中 dist[x]=dist[rs[x]]+1 合并的时候,把权志较大的根作为根节点,把这棵树右子树和另一棵树合并. 说明白点:(上图描述有点问题) 设x表示根权值较大的左偏树,y表示根 ...

  2. kubernetes(安装dashboard)

    https://blog.csdn.net/qq_22917163/article/details/84527420 1. 通过yaml文件安装dashboard 我们可以从https://githu ...

  3. php接入图灵机器人

    官网:http://www.tuling123.com 文档:https://www.kancloud.cn/turing/www-tuling123-com/718218 注册账号获取:apikey ...

  4. 最长双回文串(模板+dp)

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read(){ , f ...

  5. Java中的生产者和消费者实例(多线程 等待唤醒机制)

    1.什么是等待唤醒 我们实现的效果 创建生产者和消费者  对服装进行生产  和售卖 实现生产一个就消费一个 来观察线程的各种状态 下面是用到的方法: wait()方法:让一个线程进行等待 另外一个线程 ...

  6. ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)

    传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl n ...

  7. 与postgis相关的一些常用的sql

    create table NODES (ID SERIAL not null,geometry geography(POINTZ, 4326) null); create table EDGES (I ...

  8. python3 no module named yaml

    sudo apt-get install python3-yaml

  9. Gym 101055A 计算几何,暴力

    http://codeforces.com/gym/101055/problem/A 题目:给定一些三维空间的点,要你找一个平面,能覆盖尽量多的点,只要求输出点数即可.n<=50 因为数据量小, ...

  10. leetcoe--47. Permutations II

    1.问题描述 Given a collection of numbers that might contain duplicates, return all possible unique permu ...