是否存在MongoDB / mongoose'like'语句,例如SQL语言? 使用的唯一原因是全文搜索的实现。
答案 0 :(得分:7)
MongoDB支持RegularExpressions。
答案 1 :(得分:2)
我们可以使用java API为mongodb实现正则表达式的两种方法:
表达式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));
答案 2 :(得分:2)
虽然您可以使用正则表达式,但在全文搜索中无法获得良好的性能,因为包含查询(例如/ text / )无法使用索引。
例如/ ^ text /的开头查询可以使用索引。
如果您正在考虑大规模的全文搜索,请考虑MongoDB的Multi Key Search功能。
<强>更新强>
从MongoDB v3.2开始,您还可以使用text index。
答案 3 :(得分:0)
考虑在应用程序级别创建一个脚本,将您的数据转换为标记(单词)。然后将标记视为标记,在这些标记上构建索引,然后搜索标记,例如搜索标记。这就像创建倒排索引。
为了更好地搜索文本,可以考虑使用Lucene而不是MongoDB。
答案 4 :(得分:0)
使用正则表达式:/ ^ textforesarc $ / i。只是别忘了告别性能:)。 使用like模拟正则表达式搜索不会命中自定义索引。现在只支持启动。