我正在使用带有Java驱动程序的MongoDB(http://tinyurl.com/dyjxz8k)。在我的应用程序中,我希望它可以给出包含用户搜索项的子字符串的结果。该方法如下所示:
* searchlabel =字段的名称 * searchTerm =用户搜索词
private void dbSearch(String searchlabel, String searchTerm){
if(searchTerm != null && (searchTerm.length() > 0)){
DBCollection coll = db.getCollection("MediaCollection");
BasicDBObject query = new BasicDBObject(searchlabel, searchTerm);
DBCursor cursor = coll.find();
cursor = coll.find(query);
try {
while(cursor.hasNext()) {
System.out.println(cursor.next());
//view.showResult(cursor.next());
}
} finally {
cursor.close();
}
}
}
有没有人知道如何解决这个问题?在此先感谢=)还有一个小问题:如何根据(JLabel in)视图中的演示处理DBObjects?
答案 0 :(得分:0)
对于Mongo中的文本搜索,有两种选择:
$regex
operator - 但是除非你有一个简单的前缀regexp,否则查询将不会使用索引,并且会导致完整扫描,这通常很慢text
查询会将您的查询拆分为单词,并对包含任何单词的文档进行搜索或搜索。文本索引也消除了一些停用词,并且对某些语言具有简单的词干(参见the docs)。如果您正在寻找更高级的全文搜索引擎,具有更强大的令牌化,词干化,自动完成等,那么可能更合适。 ElasticSearch
答案 1 :(得分:0)
我在mongo控制台中使用此方法在JavaScript中使用正则表达式进行搜索:
// My name to search for
var searchWord = "alex";
// Construct a query with a simple /^alex$/i regex
var query = {};
query.animalName = new RegExp("^"+searchWord+"$","i");
// Perform find operation
var lionsNamedAlex = db.lions.find(query);