0

是否支持在集合likerlike属性值中搜索字符串?
集合是否需要为此工作定义文本类型索引?不幸的是,我无法为该属性创建文本索引。有 1 亿个文档和文本索引杀死了性能(MongoDB 在单节点上)。
如果没有文本索引这是不可行的,那对我来说很好。我会寻找替代品。

给出以下集合:

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

在 grails 中,我创建了一个 Criteria 来返回一个文档列表,其中包含有效负载中的特定字符串

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

我也试过用rlike('payload' : ".*${searchString}.*")。它没有给我带来任何文档。

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

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

1 回答 1

1

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

        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()))}
于 2015-07-31T20:47:50.393 回答