面试题答案
一键面试创建索引
- 连接到MongoDB:使用MongoDB的客户端工具(如
mongo
shell)或编程语言中的MongoDB驱动连接到数据库。 - 选择集合:例如,假设集合名为
news_articles
,使用use your_database
选择数据库,然后db.news_articles
选择集合。 - 创建文本索引:在MongoDB中,使用
createIndex
方法创建文本索引。语法如下:
db.news_articles.createIndex({content: "text"})
这里假设新闻文章的文本内容存储在content
字段中。如果文章包含多种语言,MongoDB会根据语言分析器对文本进行处理。对于不同语言,可以通过languageOverride
选项指定语言。例如,如果有一个language
字段存储文章的语言代码:
db.news_articles.createIndex({content: "text", language: 1}, {languageOverride: "language"})
查询基本语法
- 简单文本查询:使用
$text
操作符进行全文本搜索。例如,要搜索包含“computer”一词的文章:
db.news_articles.find({$text: {$search: "computer"}})
- 更复杂查询:可以结合其他条件,比如同时要求文章发布时间在某个范围内:
db.news_articles.find({
$text: {$search: "computer"},
publish_date: {$gte: ISODate("2023-01-01T00:00:00Z")}
})
- 多词查询与操作符:默认情况下,
$text
搜索使用“或”逻辑匹配多个词。如果要使用“与”逻辑,可以在词前加上$and
操作符。例如,搜索同时包含“computer”和“science”的文章:
db.news_articles.find({$text: {$search: "$and computer science"}})
- 排序与限制:可以对搜索结果进行排序和限制返回的文档数量。例如,按相关性得分降序排列并只返回前10个结果:
db.news_articles.find({$text: {$search: "computer"}}).sort({score: {$meta: "textScore"}}).limit(10)
这里score
字段使用$meta
操作符获取文本搜索的相关性得分。