MongoDB 文本搜索
MongoDB使用查询操作对字符串内容执行文本搜索。它使用文本索引和运算符来执行文本搜索。
示例:
它向您展示"如何构建文本索引并使用它来查找您的文本书籍"。
现在,您必须创建一个名为"
图书馆 "的收藏集,如下所示:
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" } } )
在上面的示例中,我们明确投影了metatextScore字段,以按相关性得分的顺序对结果进行排序。