【MongoDB】索引 – 文本索引

一、准备工作

这里准备一些数据

bash 复制代码
db.books.insertMany([
    {_id: 1, name: "Java", description: "java 入门图书", translation: [{ language: "english", description: "java basic book" }]},
    {_id: 2, name: "C++", description: "C++ 入门图书", translation: [{ language: "english", description: "c++ basic book" }]},
    {_id: 3, name: "Java设计模式", description: "java 设计模式", translation: [{ language: "english", description: "c++ design mode" }]}
]);

二、创建索引

1、创建索引

bash 复制代码
db.books.createIndex({description: 'text'});

上面创建了description字段的文本索引

2、查询索引

bash 复制代码
db.books.getIndexes();

结果如下:

可以看到多了一个名称为description_text的索引;另外可以看到索引中有权重(weights)、默认语言(default_language)、指定语言字段(language_override)、文本索引版本(textIndexVersion)

三、示例:使用英文查询

1、执行查询

bash 复制代码
db.books.find ({$text: { $search: 'java'}});

结果如下:

2、执行过程

bash 复制代码
db.books.find ({$text: { $search: 'java'}}).explain();

结果如下:

可以看到查询过程中会使用到索引名称为description_text的索引

四、示例:使用中文查询

1、执行查询

bash 复制代码
db.books.find ({$text: { $search: '入门语言'}});

结果如下:

2、执行过程

bash 复制代码
db.books.find ({$text: { $search: '入门语言'}}).explain();

结果如下:

可以看到查询过程中会使用到索引名称为description_text的索引

五、示例:使用中文查询

1、执行查询

bash 复制代码
db.books.find ({$text: { $search: '入门'}});

查询不到任何结果

2、执行过程

bash 复制代码
db.books.find ({$text: { $search: '入门'}}).explain();

结果如下:

可以看到查询过程中会使用到索引名称为description_text的索引

3、分析

在创建文本索引时,会先对文本进行分词,根据分词后的结果建立索引;这里分词使用的是空格,所以使用java或者入门语言进行搜索时都可以查询到结果,而使用入门进行搜索时却无法查询到任何数据。

相关推荐
南城花随雪。11 分钟前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了12 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度13 分钟前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮16 分钟前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
gma9991 小时前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️1 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz98762 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
苏-言2 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
Ljw...2 小时前
索引(MySQL)
数据库·mysql·索引
菠萝咕噜肉i2 小时前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁