PyMongo中使用text进行全文搜索的注意事项

2023-04-15 00:00:00 pymongo 全文 注意事项
  1. 需要先安装MongoDB的全文搜索引擎插件,在MongoDB 3.2及以上版本中已默认安装,不需要额外安装。
  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等搜索引擎来实现,查询效率不如精确搜索高。

相关文章