• 【MongoDB】索引 – 文本索引


    一、准备工作

    这里准备一些数据

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

    二、创建索引

    1、创建索引

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

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

    2、查询索引

    db.books.getIndexes();

    结果如下:

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

    三、示例:使用英文查询

    1、执行查询

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

    结果如下:

    2、执行过程

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

    结果如下:

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

    四、示例:使用中文查询

    1、执行查询

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

    结果如下:

    2、执行过程

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

    结果如下:

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

    五、示例:使用中文查询

    1、执行查询

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

    查询不到任何结果

    2、执行过程

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

    结果如下:

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

    3、分析

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

  • 相关阅读:
    第九天 Python爬虫之Scrapy(框架工作原理 )
    7. Git 仓库创建
    数据结构与算法之从前序与中序遍历序列构造二叉树
    GZ035 5G组网与运维赛题第10套
    LoRA Land: 310个经微调的大语言模型可媲美GPT-4
    Nacos简介
    SQL Server2019配置always on高可用图文步骤
    火狐浏览器页面翻译
    【Linux】(六)MobaXterm文件传输与终端-实验室服务器使用MobaXterm传输文件和ssh终端连接
    “算法的中间状态:混沌与秩序的微妙平衡“论文基本格式
  • 原文地址:https://blog.csdn.net/m1729339749/article/details/134246618