MongoDB 不是文本的字符串索引?
MongoDB string index that is not text?
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的文档说只能创建一个文本索引,那么字符串字段上的索引和文本索引有什么区别?
text
索引用于 full-text search。实施比这要复杂一些,但 认为 将其作为字符串中每个 单词 的索引。
相反,plain索引一次索引整个字段。它们应该是您的默认选择——即使字段包含字符串——因为它们对于搜索相等性、范围或前缀非常有效。但不检索字段中间的单词。
鉴于您的示例,对用户名使用普通索引非常有意义,但对推文内容使用全文索引。
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的文档说只能创建一个文本索引,那么字符串字段上的索引和文本索引有什么区别?
text
索引用于 full-text search。实施比这要复杂一些,但 认为 将其作为字符串中每个 单词 的索引。
相反,plain索引一次索引整个字段。它们应该是您的默认选择——即使字段包含字符串——因为它们对于搜索相等性、范围或前缀非常有效。但不检索字段中间的单词。
鉴于您的示例,对用户名使用普通索引非常有意义,但对推文内容使用全文索引。