MongoDB字符串索引不是文本?

时间:2015-06-09 03:40:51

标签: mongodb twitter pymongo

MongoDB如何索引未标识为文本的字符串?例如,推文有许多文本字段,我为它们中的任何一个创建索引。在我的应用程序中,我创建了一个索引,用于编写推文的时间,编写的人以及推文的文本,但只将文本标识为文本索引。

import pymongo as pm
db.collection.create_index('created_at')  # tweet creation time is a string
db.collection.create_index('user.screen_name')  # user's screen name
db.collection.create_index([('text', pm.TEXT)])  # tweet text is a string

然而,我仍然可以搜索字符串字段。

db.collection.find({'user.screen_name': 'johndoe'})

为什么呢? MongoDB的文档说只能创建一个文本索引,那么字符串字段的索引和文本索引之间的区别是什么?

1 个答案:

答案 0 :(得分:1)

from datetime import datetime from apscheduler.scheduler import Scheduler # Start the scheduler sched = Scheduler() sched.start() def job_function(): print "Hello World" # Schedule job_function to be called every two hours sched.add_interval_job(job_function, hours=2) # The same as before, but start after a certain time point sched.add_interval_job(job_function, hours=2, start_date='2010-10-10 09:30') 索引适用于full-text search。实现稍微复杂一点,但认为它是字符串中每个单词的索引。

相反, plain 索引会立即索引整个字段。它们应该是您的默认选择 - 即使字段包含字符串 - 因为它们非常有效地搜索相等,范围或前缀。但是不要在字段中间检索单词。

根据您的示例,在用户名上使用普通索引,但在推文内容上使用全文索引是非常有意义的。