5

MongoDB/mongoose 'like' 语句中是否有诸如 SQL 语言之类的语句?使用的唯一原因是全文搜索的实现。

4

5 回答 5

7

MongoDB 支持正则表达式

于 2012-05-29T05:33:11.777 回答
2

我们可以使用 mongodb 的 java API 实现正则表达式的两种方法:

表达式 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));
于 2012-08-24T11:07:50.007 回答
2

尽管您可以使用正则表达式,但您在全文搜索中不会获得良好的性能,因为 /text/ 之类的包含查询不能使用索引。

但是,诸如 /^text/ 之类的开头查询可以使用索引。

如果您正在考虑任何大规模的全文搜索,请考虑 MongoDB 的多键搜索功能。

更新

从 MongoDB v3.2 开始,您还可以使用文本索引

于 2012-08-24T18:44:40.430 回答
0

考虑在应用程序级别制作一个脚本,将您的数据转换为令牌(单词)。然后将令牌视为标签,在这些令牌上建立索引,然后像搜索标签一样搜索令牌。这就像创建一个倒排索引。

要获得更好的文本搜索功能,请考虑使用 Lucene 而不是 MongoDB。

于 2012-06-28T21:26:13.863 回答
0

使用正则表达式:/^textforesarc$/i。只是不要忘记与性能说再见:)。使用 like 模拟正则表达式搜索不会命中自定义索​​引。目前仅支持以开头。

于 2012-07-12T23:35:54.570 回答