文本检索

文本检索

比如说你有一个集合,里面存储了商店信息,把它们插入数据库

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" }
]
)
现在我想检索其中包含 Java,Coffee,shop三个词的所有条目。
那么就可以用到文本索引(text index)了,文本索引可以包括任何值为字符串或者数组中元素为字符串的字段。

在使用文本索引之前,必须先在集合中创建一个文本索引。
有必要说明的是,一个集合中只能有一个文本索引,但是这个文本索引可以包含多个字符串,中间用空格隔开。
创建索引命令如下:

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

然后会用到$text,$text的作用就是在一个已经创建文本索引的集合中查找文本。
$text使用空格和标点符号作为分隔符,对检索字符串进行分割,对检索出来的分词结果执行一个逻辑or操作。
要查找Java,Coffee,shop三个词的所有条目的命令如下:

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


文本检索_第1张图片
image.png

如果查询失败了,先看看自己是否创建的文本索引,这点容易忘记。

精确检索

如果我想查找包含“java”或者“coffee shop”的所有条目呢?可以这样写:

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

语句排除

如果我想查找包含“java”或者“shop”,但是不包含“coffee”的商店

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


文本检索_第2张图片
image.png

你可能感兴趣的:(文本检索)