文本索引能解决快速文本查找的需求,比如有一个博客文章集合,需要根据博客的内容来快速查找,则可以针对博客内容建立文本索引。
MongoDB支持在字符串内容上执行文本检索的查询操作。为了执行文本检索,它使用“text index”和“$text”操作符。
注意:一张表,只能有一个全文索引
1 准备测试数据
db.textIndexTest.insertMany([
{ author: "杜甫", title: "绝句", article: "两个黄鹂鸣翠柳, 一行白鹭上青天。窗含西岭千秋雪,门泊东吴万里船。" },
{ author: "李白", title: "静夜思", article: "床前明月光,疑是地上霜。 举头望明月,低头思故乡。" },
{ author: "李白", title: "静夜思", article: "床前明月光,山寨,疑是地上霜。 举头望明月,低头思故乡。" },
{ author: "张 王", title: "你好", article: "测试数据" },
{ author: "李贺", title: "李凭箜篌引", article: "吴丝蜀桐张高秋,空山凝云颓不流。 江娥啼竹素女愁,李凭中国弹箜篌。 昆山玉碎凤凰叫,芙蓉泣露香兰笑。 十二门前融冷光,二十三丝动紫皇。 女娲炼石补天处,石破天惊逗秋雨。 梦入神山教神妪,老鱼跳波瘦蛟舞。 吴质不眠倚桂树,露脚斜飞湿寒兔。" }
])
2 测试索引
//建全文索引
db.textIndexTest.createIndex( { title:"text",article: "text" } )
//精确检索
db.textIndexTest.find({$text:{$search:"床前明月光"}}).explain()
//词语排除
//使用横杠(- )字符,将该字符放在不要的词语前,查询时可排除该词语。
db.textIndexTest.find({$text:{$search:"床前明月光 -山寨"}}).explain()
//返回相关性分数,并按分数排序
db.textIndexTest.find(
{ $text: { $search: "床前明月光" } },
{ score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } })