【MongoDB】索引 – 文本索引

一、准备工作

这里准备一些数据

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、创建索引

db.books.createIndex({description: 'text'});

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

2、查询索引

db.books.getIndexes();

结果如下:

【MongoDB】索引 – 文本索引_第1张图片

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

三、示例:使用英文查询

1、执行查询

db.books.find ({$text: { $search: 'java'}});

结果如下:

【MongoDB】索引 – 文本索引_第2张图片

2、执行过程

db.books.find ({$text: { $search: 'java'}}).explain();

结果如下:

【MongoDB】索引 – 文本索引_第3张图片

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

四、示例:使用中文查询

1、执行查询

db.books.find ({$text: { $search: '入门语言'}});

结果如下:

【MongoDB】索引 – 文本索引_第4张图片

2、执行过程

db.books.find ({$text: { $search: '入门语言'}}).explain();

结果如下:

【MongoDB】索引 – 文本索引_第5张图片

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

五、示例:使用中文查询

1、执行查询

db.books.find ({$text: { $search: '入门'}});

查询不到任何结果

2、执行过程

db.books.find ({$text: { $search: '入门'}}).explain();

结果如下:

【MongoDB】索引 – 文本索引_第6张图片

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

3、分析

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

你可能感兴趣的:(MongoDB,mongodb,nosql,数据库)