0

我正在使用带有 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 中的)视图中的表示来处理 DBObjects?

4

2 回答 2

0

对于 Mongo 中的文本搜索,有两个选项:

  • $regex运算符- 但是,除非您有一个简单的前缀正则表达式,否则查询不会使用索引,并且会导致完全扫描,这通常很慢
  • 在 Mongo 2.4 中,引入了新的文本索引。查询会将您的text查询拆分为单词,并对包含任何单词的文档进行或搜索。文本索引还消除了一些停用词,并为某些语言提供了简单的词干提取(参见文档)。

如果您正在寻找更高级的全文搜索引擎,具有更强大的标记、词干提取、自动完成等功能,那么 ElasticSearch 可能更合适

于 2013-04-24T07:39:01.540 回答
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);
于 2013-04-24T08:34:13.903 回答