2012-05-29 64 views

回答

0

考慮在應用程序級別創建一個將數據轉換爲標記(單詞)的腳本。然後將標記視爲標記,在這些標記上構建索引,然後像搜索標記一樣搜索標記。這就像創建一個倒排索引。

爲了更好地搜索文本,可以考慮使用Lucene代替MongoDB。

0

使用正則表達式:/^textforesarc $/i。只是不要忘記說再見的性能:)。 使用like模擬正則表達式搜索不會擊中自定義定義的索引。現在只支持開始。

2

兩種方式,我們可以使用Java API MongoDB的實現正則表達式:

表達式1: 我需要搜索開始在文檔字段串

String strpattern ="your regular expression"; 
Pattern p = Pattern.compile(strpattern); 

BasicDBObject obj = new BasicDBObject() 
obj.put("key",p); 

例子:(考慮我想要搜索名稱以'a'開頭的任何地方)

String strpattern ="^a"; 
Pattern p = Pattern.compile(strpattern); 

BasicDBObject obj = new BasicDBObject() 
obj.put("name",p); 

表達式2:

我需要搜索多個單詞在一個字段,你可以使用如下

String pattern = "\\b(one|how many)\\b"; 

BasicDBObject obj = new BasicDBObject(); 

//if you want to check case sensitive 

obj.put("message", Pattern.compile(pattern,Pattern.CASE_INSENSITIVE)); 
2

雖然你可以使用正則表達式,你會不會在全文檢索獲得良好的性能,因爲一個包含查詢如/ text/不能使用索引。

一開始,查詢例如/^text/can可以使用索引。

如果您正在考慮全面搜索大規模的文本,請考慮MongoDB的Multi Key Search功能。

更新

由於MongoDB的V3.2,你也可以使用一個text index