2012-02-07 88 views
12

我們正在嘗試開發一種在我們的mongodb實例上使用elasticsearch進行全文搜索的策略。看起來,我們想要用作濾波器的每個密鑰都必須包含在彈性指數中。我們可能希望將mongo中的每個密鑰用作過濾器 - 即描述的全文搜索,按日期和電話號碼過濾。有沒有人有將mongo全文添加到他們可以共享的現實經驗?mongodb全文搜索策略

也許我們可以使用elasticsearch作爲db?

回答

14

我看不出有什麼理由將ElasticSearch與MongoDb結合使用,只是使用ElasticSearch作爲文檔的單獨文檔存儲,必須進行搜索。是的,你甚至可以作爲整個分貝。當然這取決於你的領域模型和其他因素。

如果您不需要詞幹,模糊搜索,複雜的通配符搜索,您可以使用mongoDb進行搜索。插入新文檔時,將其分割爲小寫的單詞,並添加到數組「單詞」中。稍後,您可以使用regex對此陣列執行搜索請求。不是你可以'在這個正則表達式中使用I(忽略大小寫)選項,並且你可以只搜索LIKE%通配符(或沒有通配符),否則搜索將不使用mongoDb索引。

還有一個選擇 - 你可以嘗試找到river MongoDB的

另一種選擇 - 是,如果你使用的是Java使用Lucene。可能您將能夠擴展Directory類,以這種方式,Lucene將在MongoDb中存儲索引而不是文件系統或RAM。我還沒有在這方面做任何研究,但我認爲這是可能的

+0

感謝奧馬爾,我們打算給你approcah試試 – stew 2012-02-08 13:15:46

+0

雖然這是一個選項,有那麼一刻,數據的權重足夠大,使正則表達式搜索的效率低下的選擇。這就是爲什麼搜索索引器存在的原因。它們補充並增強了持久性存儲,以便將昂貴的搜索操作從數據庫中刪除。 – 2013-03-06 17:18:04

+0

即使有正則表達式mongodDb可以使用索引,正如我在答案中所述,它取決於正則表達式的類型 – Anton 2013-06-25 19:24:45

9

我嘗試在MongoDB中進行全文搜索,將@Umar建議的字符串分開。老實說,它是一個數據庫,而不是一個搜索引擎,所以我會使用Mongo來實現持久性存儲,並使用ElasticSearch作爲搜索引擎的一部分。事實上,我會堅持使用像Postgresql這樣的持久存儲,然後將要搜索的數據推送到搜索引擎。 http://gdal.org/ogr/drv_elasticsearch.html是一款驅動程序,可讓您將數據從一個RDBMS快速導出到ElasticSearch。只要數據是連接輸入源的方式,數據就不必是地理空間數據以便使用GDAL。

亞當