MongoDB 文本搜索

一、MongoDB 文本搜索

MongoDB 使用查询操作执行字符串内容的文本搜索。它使用文本索引和运算符来执行文本搜索。

示例:

它向您展示了“如何构建文本索引并使用它来查找您的书籍”。

现在,您必须创建一个名为“ library ”的集合,如下所示:

db.stores.insert(  
   [  
     { _id: 101, name: "Java", description: "By ABC" },  
     { _id: 102, name: "MongoDB", description: "By XYZ" },  
     { _id: 103, name: "Python", description: "By ABCD" },  
     { _id: 104, name: "Engineering Mathematics", description: "By *****" },  
     { _id: 105, name: "Salesforce", description: "By Salesforce" }  
   ]  
)  

二、MongoDB 文本索引

在 MongoDB 中,我们有文本索引来支持对字符串内容的文本搜索查询。具有任何字符串值或字符串元素数组的字段可以按文本索引包含

我们的集合中必须有一个文本索引才能执行文本搜索查询。在一个表/集合中,我们只能有一个文本搜索索引。但是一个索引可以覆盖多个字段。

我们可以在 Mongo shell 中运行以下示例,以允许文本搜索覆盖名称和描述字段:

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

$text 运算符

我们可以使用 $text 运算符对具有文本索引的表执行文本搜索。$text 运算符将标记使用空格和大多数标点符号作为分隔符的搜索字符串。$text 运算符对搜索字符串中的所有此类标记执行逻辑 OR 操作。

在下面的示例中,我们可以使用查询来查找包含与“MongoDB”、“Java”、“DBMS”等相关的任何书籍名称的所有库。

db.library.find( { $text: { $search: "Java" } } )

使用 $text 运算符,我们还可以通过将它们用双引号括起来来搜索精确的短语。只有那些包含短语的文档才会被匹配。

Sorting排序

MongoDB 默认以未排序的顺序返回结果。文本搜索查询将为每个文档计算最佳分数,该查询指定文档与查询的匹配程度。

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

在上面的示例中,我们显式地投影元 textScore 字段以按照相关性得分的顺序对结果进行排序。

热门文章

优秀文章