PyMongo实现中文全文检索的技巧

2023-04-15 00:00:00 中文 技巧 检索

要实现中文全文检索,可以使用 PyMongo 中的 text.indexes 创建文本索引。具体介绍如下:

  1. 创建索引

在集合中创建文本索引,可以使用 text.indexes.create_one() 方法。例如,要在名为 “articles” 的集合中创建一个字段名为 “content” 的文本索引,可以使用以下代码:

from pymongo import MongoClient, TEXT

client = MongoClient()
db = client['mydatabase']
collection = db['articles']

collection.create_index([('content', TEXT)])

第一个参数是一个元组列表,每个元组指定了一个字段名和它的索引类型,这里的 TEXT 表示文本索引。

注意,这里使用了默认的语言,如果需要指定不同的语言,可以在创建索引时传入一个语言代码:

collection.create_index([('content', TEXT('english'))])
  1. 查询索引

创建完索引后,就可以在集合中使用 $text 操作符进行全文检索。例如,搜索 “pidancode.com”:

result = collection.find({'$text': {'$search': 'pidancode.com'}})
for r in result:
    print(r)

这里的 $text 操作符指定了使用文本索引进行搜索,$search 操作符指定了要搜索的关键字。

如果要同时搜索多个关键字,可以在关键字之间加上引号,例如搜索 “皮蛋编程” 和 “pidancode.com”:

result = collection.find({'$text': {'$search': '"皮蛋编程" "pidancode.com"'}})
for r in result:
    print(r)

注意,文本索引只能用于字符串类型的字段,所以在创建索引时需要指定要搜索的字段。如果需要在多个字段中搜索,可以将它们合并成一个字段,例如:

collection.create_index([('content', TEXT), ('title', TEXT)], name='search_index')

这里创建了一个名为 “search_index” 的索引,包含 “content” 和 “title” 两个字段,当搜索时会同时搜索这两个字段。

相关文章