【问题标题】:'SQL 'like' statement in mongodb [duplicate]MongoDB中的'SQL'like'语句[重复]
【发布时间】:2012-06-03 08:16:00
【问题描述】:

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

【问题讨论】:

  • 在 MongoDB Atlas 中使用 Lucene 也有一种新的更好的方法来完成此任务:docs.atlas.mongodb.com/atlas-search

标签: mongodb mongoose


【解决方案1】:

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

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

如果您正在考虑进行任何大规模的全文搜索,请考虑使用 MongoDB 的 Multi Key Search 功能。

更新

从 MongoDB v3.2 开始,您还可以使用 text index

【讨论】:

    【解决方案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));
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          MongoDB 支持RegularExpressions

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-20
            • 2018-03-14
            • 2017-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多