2013-04-24 64 views
0

我正在使用MongoDB和Java驱动程序(http://tinyurl.com/dyjxz8k)。在我的应用程序中,我希望能够给出包含用户搜索词的子字符串的结果。该方法是这样的:如何检索包含搜索词的子字符串的DBObjects?

*索引标识查询=场 * 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

PLS,显示例如DB结构 – 2013-04-24 06:57:38

回答

0

对于蒙戈文本的搜索,有两种选择:

  • $regex operator - 但除非你有一个简单的前缀正则表达式,查询不会使用索引,并会导致一个完整的扫描,这通常很慢
  • 在Mongo 2.4中,引入了一个新的text index。一个text查询会将您的查询拆分为单词,并对文档进行搜索或搜索,包括任何单词。文本索引还可以消除一些停用词并对某些语言进行简单词法分析(请参见the docs)。

如果您正在寻找更高级的全文搜索引擎,并且使用更强大的令牌化,词干化,自动完成等功能,可能会更好。 ElasticSearch

+0

你确切地知道,所使用的是什么类型的结构?可能存在具有权重的复杂对象阵列(如下所示:[{kword:[tag1,tag2,...],weight1},{...}]) – 2013-04-24 08:31:05

+0

我认为这是现在最简单的正则表达式。我只是需要它正常工作。 我试过这段代码,但它不起作用。这是写错了吗? BasicDBObject query = new BasicDBObject(searchlabel,new BasicDBObject(“$ regex”,searchTerm \t \t \t \t \t).append(“$ options”,“i”)); – 2013-04-24 17:53:45

+0

@VladimirMuzhilov是真的,如果有权重等,那么我不认为蒙哥能够处理。 – adamw 2013-04-24 18:08:32

0

我用这个方法在蒙戈控制台在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); 
+0

谢谢,但我在Java中尝试了这一点,它不起作用。 – 2013-04-24 17:52:43

+0

这是JavaScript,所以我不认为它会复制并粘贴到Java中... – 2013-04-26 12:51:50

相关问题