我正在使用mongo数据库在python中工作。我正在使用pymongo 3.6在多个字段上创建文本索引并执行不区分大小写的搜索,但是遇到了麻烦。 我正在使用
创建文本索引text_index_name = db_collection.create_index([("name", TEXT),
("summary", TEXT)],
name = 'text_search_index')
然后我尝试使用以下命令执行不区分大小写的搜索:
name = "SomeTerm"
db_collection.find({"$text":{"$search":{
"$regex":re.compile(name, re.IGNORECASE)}},
})
这将返回以下错误:
"$search" had the wrong type. Expected string, found object
我尝试通过首先创建不区分大小写的文本索引来使用归类
text_index_name = db.collection.create_index(
[("name", TEXT),("summary", TEXT)],
collation=Collation(
locale="en",
caseLevel=False,
caseFirst="off",
strength=2,
numericOrdering=True,
alternate="non-ignorable",
maxVariable="space",
backwards=True),
name = 'text_search_index')
但是我得到以下信息:
Index type 'text' does not support collation:
{ locale: "en", caseLevel: true, caseFirst: "off", strength: 5,
numericOrdering: true, alternate: "non-ignorable", maxVariable:
"space", normalization: false, backwards: true, version: "57.1" }
我看过其他一些成功使用正则表达式的帖子,但是这些帖子正在单个字段中搜索字符串,例如以下类型:
db_collection.find_one({"summary":re.compile("some_term", re.IGNORECASE)})
这也对我有用,但是我无法在$ search中使用它
非常感谢您的帮助。
答案 0 :(得分:0)
您不能在文本搜索中使用$regex
运算符。但是,默认情况下,文本搜索为case-insensitive,因此您可以执行以下操作:
db_collection.find({"$text": {"$search": name}})