2011-09-05 101 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索引進行全文搜索。