grails gorm mongodb `like` 标准中的功能

grails gorm mongodb `like` functionality in criteria

likerlike 是否支持在集合的 属性 值中搜索字符串?
集合是否需要定义文本类型索引才能工作?不幸的是,我无法为 属性 创建文本索引。有 1 亿个文档和文本索引扼杀了性能(MongoDB 在单个节点上)。
如果没有文本索引无法做到这一点,我觉得没问题。我会寻找替代品。

给出以下合集:

Message {
    'payload' : 'XML or JSON string' 
    //few other properties
}

在 grails 中,我创建了一个条件 return 我在有效负载中包含特定字符串的文档列表

Message.list {
  projections {
    like('payload' : searchString)
  }
}

我也尝试使用 rlike('payload' : ".*${searchString}.*")。它没有给我任何文件。

注意:当我在 Mongo shell 上触发本机查询时,我能够获取文档。

db.Message.find({payload : { $regex : ".*My search string.*" }}).pretty()

我以一种迂回的方式让它工作。我相信有一个更好的 grails 解决方案。标准方法不起作用。所以使用低级别 API 将 DBObjects 转换为域对象。

        def query = ['payload' : [ '$regex' : /${searchString}/ ]  ]
        def dbObjects = Message.collection.find(query).skip(offset).limit(defaultPageSize).toArray()
        dbObjects?.collect { new Message(new JsonSlurper().parseText(it.toString()))}