Mongodb 文本检索

Mongodb支持对字符串字段的文本检索。在Mongodb atlas中, 对这种文本检索的功能进行了增强。 提到文本检索, 难免不会想到实现非常火爆的AI, 聊天服务等时髦技术。mongodb提供的这种文本检索功能+适当的算法实践,似乎可以支持这些应用场景。

本文研究Mongodb文本检索文档,整理出在本地Mongo数据库中使用文本检索的方法和注意事项。

文本检索

执行文本检索前,用户需要在执行检索的集合建立文本索引。mongodb通过为文字内容建立文本索引的方式支持文本检索。文本索引可以包含任何字符串字段或字符串数组字段。一个mongodb集合中,只能有一个文本索引,但文本索引中可以包含多个字段。

mongodb的普通查询和聚合查询,都支持文本检索。

应用举例

创建测试集合

创建一个stores集合, 包括name, description两个字符串字段

db.stores.insertMany([
    { _id: 1, name: "Java Hut", description: "Coffee and cakes" },
    { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },
    { _id: 3, name: "Coffee Shop", description: "Just coffee" },
    { _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },
    { _id: 5, name: "Java Shopping", description: "Indonesian goods" }
])

添加文本索引

db.stores.createIndex( {name: "text", description: "text"})

精确查询

使用双引号,将查询文字包起来,进行精确查询。

db.stores.find( {$text: {$search: "\"coffee shop\""}})

当没有\转义时,查询包含coffee或包含shop的文档记录。下面查询语句中mongodb使用空格,将查询条件的coffee和shop分开,进行or查询。同样,mongodb也会对其他标点符号进行差分,拆分出多个字符串,进行or查询。

db.stores.find( {$text: {$search: "coffee shop"}})

排除字符串

使用符号“-”, 排除包含字符串的文档。如查询字符串中包含java或包含shop但不包含coffee的文档

db.stores.find({$text: {$search: "java shop -coffee"}})

排序

使用文本检索查询时,mongodb返回没有排序的结果。但mongodb支持使用其内部计算出来的匹配分数来进行排序。使用{$meta: "textScore"}获取文档与查询条件中的匹配分数。

db.stores.find({
    $text: {$search: "java coffee shop"}
}, {
    score: {$meta: "textScore"}
}).sort( {score: {$meta: "textScore"}})

相关推荐

  1. Mongodb 文本检索

    2024-02-17 19:36:04       56 阅读
  2. MongoDB 全文检索

    2024-02-17 19:36:04       54 阅读
  3. MongoDB 全文检索

    2024-02-17 19:36:04       29 阅读
  4. Mongodb文本索引

    2024-02-17 19:36:04       20 阅读
  5. MongoDB更新文档

    2024-02-17 19:36:04       62 阅读
  6. MongoDB 文档更新update

    2024-02-17 19:36:04       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-17 19:36:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-17 19:36:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-17 19:36:04       82 阅读
  4. Python语言-面向对象

    2024-02-17 19:36:04       91 阅读

热门阅读

  1. FFmpeg编译安装外部库包括NVIDIA

    2024-02-17 19:36:04       62 阅读
  2. C++ 最多参加的场次。

    2024-02-17 19:36:04       53 阅读
  3. vue3 axios二次封装

    2024-02-17 19:36:04       64 阅读
  4. 安装GeoServer,配置CORS

    2024-02-17 19:36:04       50 阅读
  5. 面试计算机网络框架八股文十问十答第六期

    2024-02-17 19:36:04       57 阅读
  6. 国产计算机的种类和应用

    2024-02-17 19:36:04       48 阅读
  7. 实现钉钉自定义机器人推送markdown类型消息

    2024-02-17 19:36:04       54 阅读
  8. 4 存储器管理(上)

    2024-02-17 19:36:04       56 阅读
  9. 倒计时52天(待续,,,

    2024-02-17 19:36:04       48 阅读