📜  MongoDB文本搜索

📅  最后修改于: 2020-11-23 01:20:47             🧑  作者: Mango

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中,我们有文本索引来支持对字符串内容的文本搜索查询。具有任何字符串值或字符串元素数组的字段可能包含文本索引

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

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

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

$ text运算子

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

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

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

使用$ text运算符,我们还可以通过将它们括在双引号中来搜索确切的短语。仅匹配包含短语的那些文档。

例如 –

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

排序

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

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

在上面的示例中,我们明确投影了meta textScore字段,以按相关性得分的顺序对结果进行排序。