2011-09-05 159 views
0

我正在尝试使用某种形式的全文搜索功能来搜索我的mongodb集合(la flowdock)。 我为每个文档创建一个_keywords条目,并使用该文档中其他字段的小写字母填充它。然后我像这样搜索它(前缀搜索)ex。搜索字符串=“车”mongodb全文搜索建议多个词

found_shots = connection.Shot.find({'_keywords': re.compile('^%s' % searchString.lower())}).limit(limit).skip(skip) 

问题是,当我尝试在多个单词搜索(例如,搜索字符串= [“汽车”,“在线”]

regex1 = re.compile('^%s' % searchStrings[0].lower()) 
regex2 = re.compile('^%s' % searchStrings[1].lower()) 
found_shots = connection.Shot.find({'$and':[{'_keywords':regex1},{'_keywords':regex2}]}).limit(limit).skip(skip) 

这是行不通的。任何的想法,请?

+0

你运行的是哪个版本的mongo,因为$并且只有1.9.x或更高版本 – Sammaye

+0

@Sammaye:1.8.2你说得对。我的印象是,我将它更新到2.0进行测试,但我没有。我的错。我的代码是否适用于2.0?这是做这件事的好方法吗?坏?除了运行2个不同的查询并在Python中对它们进行逻辑运算外,还有其他的方法吗 – pocorschi

+0

应该这样做,正则表达式对象可能不会,而只是用标准的//字符串替换它,如果不是,则返回 – Sammaye

回答

1

$,仅在1.9.x中

可用,因为使用的是1.8.2它不能正常工作。

如果升级,您将获得最新的一组命令,您将可以使用$和命令。

1

MongoDB 2.6现在可以允许使用$ text命令和FTS索引进行全文搜索。