PyMongo中使用text进行全文搜索的注意事项
- 需要先安装MongoDB的全文搜索引擎插件,在MongoDB 3.2及以上版本中已默认安装,不需要额外安装。
- 在创建集合时,需要先创建索引,使用create_index()方法创建text类型的索引,如下所示:
collection.create_index([('content', 'text')])
这里以‘content’字段为例进行全文索引。
3. 使用$text操作符进行查询,如下所示:
collection.find({'$text': {'$search': 'pidancode.com'}})
这里进行包含‘pidancode.com’的全文搜索。
4. 需要注意的是,text类型的索引只能被用来搜索一个集合中的某一个字段,并不能同时搜索多个字段,但可以通过将多个字段合并为一个字段来实现搜索多个字段。例如,将‘title’和‘content’字段合并为一个字段‘text’:
collection.update({}, {'$set': {'text': '$title' + ' ' + '$content'}}, multi=True) collection.create_index([('text', 'text')])
通过这种方式,就可以对‘text’字段进行全文搜索了。
以下是一个完整的代码演示:
from pymongo import MongoClient # 连接MongoDB数据库 client = MongoClient('localhost', 27017) db = client['test_db'] collection = db['test_collection'] # 创建text类型索引 collection.create_index([('content', 'text')]) # 添加测试数据 doc_list = [{'title': 'python教程', 'content': '皮蛋编程(pidanCode.com)是一个优秀的编程网站'}, {'title': 'Java教程', 'content': '皮蛋编程是一家编程教育公司'}, {'title': 'Linux教程', 'content': '在皮蛋编程(pidanCode.com)学习编程非常容易'}] collection.insert_many(doc_list) # 查询包含'pidancode.com'的数据 result = collection.find({'$text': {'$search': 'pidancode.com'}}) for r in result: print(r)
注意事项:
1. 查询字符串的写法和多数搜索引擎相同,支持布尔操作符(“and”,“or”,“not”),支持短语搜索(“将两个或多个单词视为短语,如果它们紧挨着并用双引号括起来”)。
2. text类型索引不支持数字类型,日期类型等数据类型。
3. 全文搜索需要借助Lucene等搜索引擎来实现,查询效率不如精确搜索高。
相关文章