Text Search_概述
-
文本搜索
概述:
MongoDB支持对字符串内容的文本搜索的查询操作,为执行文本搜索,MongoDB使用文本索引(Text Index)和$ 文本操作符($text Operator)两种方式实例:
此实例演示如何在仅给出文本字段的情况下,构建文本索引,并使用它来查找咖啡店
使用以下文档来创建一个商店的集合:db.stores.insert( [ { _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" } ] )
- 文本索引
MongoDB提供了文本索引来支持对字符串内容的文本搜索查询。 文本索引可以包括值为字符串或字符串数组的任何字段。
要执行文本搜索查询,您的集合必须包含一个文本索引。 一个集合只能有一个文本搜索索引,但该索引可以覆盖多个字段。
例如,您可以在mongo shell中运行以下命令以允许在名称和描述字段中进行文本搜索:
db.stores.createIndex({name:“text”,description:“text”})
- 文本操作符
使用$ text查询运算符对带有文本索引的集合执行文本搜索。
$ text将使用空格和常用的标点符号作为分隔符对搜索字符串进行标记,并对搜索字符串中的所有这些标记执行逻辑或运算。
例如,您可以使用以下查询来查找包含“coffee”,“shop”和“java”列表中任何字词的所有商店:
db.stores.find({$ text:{$ search:“java coffee shop”}})
- 精确词组
您也可以通过将其包含在双引号中来搜索确切的短语。 例如,以下示例将找到包含“java”或“coffee shop”的所有文檔:
db.stores.find( { $text: { $search: "java\"coffee shop\"" } } )
- 项目排除(Term Exclusion)
要排除单词,可以在前面加上“ - ”字符。 例如,要查找包含“java”或“shop”但不包含“coffee”的所有商店,请使用以下命令:
db.stores.find( { $text: { $search: "java shop -coffee" } } )
- 排序(Sorting)
默认情况下,MongoDB将以未排序的顺序返回其结果。 然而,文本搜索查询将计算每个文件的相关性分数(指定文件与查询匹配的程度)。
要按相关性得分的顺序对结果排序,必须显式地投影$ meta textScore字段再对其排序:
db.stores.find( {$text:{$ search:“java coffee shop”}}, {score:{$ meta:“textScore”}} ).sort({score:{$ meta:“textScore”}})
文本搜索也可在聚集管道(aggregation pipeline)中使用。
语言支持
MongoDB支持各种语言的文本搜索。 有关支持的语言列表,请参阅文本搜索语言
- 文本索引
-
原文网址:https://docs.mongodb.com/manual/text-search/