如何检索包含搜索字的子字符串的DBObject?

时间:2013-04-24 00:53:50

标签: java mongodb substring dbobject

我正在使用带有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?

2 个答案:

答案 0 :(得分:0)

对于Mongo中的文本搜索,有两种选择:

  • $regex operator - 但是除非你有一个简单的前缀regexp,否则查询将不会使用索引,并且会导致完整扫描,这通常很慢
  • 在Mongo 2.4中,引入了新的text indextext查询会将您的查询拆分为单词,并对包含任何单词的文档进行搜索或搜索。文本索引也消除了一些停用词,并且对某些语言具有简单的词干(参见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);