我正在使用Grails可搜索插件,现在我们切换到了GORM MongoDB插件。 可搜索插件有一个方法搜索(),允许使用布尔连接器和通配符搜索所有字段。 Grails GORM MongoDB插件中是否有类似的方法?在可搜索的search()方法中,Grails GORM MongoDB插件中是否有类似的方法?
如果不是,创建类似方法的最佳实践是什么?
我正在使用Grails可搜索插件,现在我们切换到了GORM MongoDB插件。 可搜索插件有一个方法搜索(),允许使用布尔连接器和通配符搜索所有字段。 Grails GORM MongoDB插件中是否有类似的方法?在可搜索的search()方法中,Grails GORM MongoDB插件中是否有类似的方法?
如果不是,创建类似方法的最佳实践是什么?
可搜索的,以及Elasticsearch插件似乎依赖于Hibernate插件,并且不适用于MongoDB GORM。我实现了一个简单的搜索服务蒙戈使用低级别的API,并蒙戈“$正则表达式”运营商:
下面是搜索名为“页面”
域类的“内容”属性的示例class SearchService {
static transactional = false
def query(String query){
return Page.collection.find(['content':['$regex':query, '$options': 'i']]).collect({
it as Page
})
}
}
基本上,卢卡斯T提到的正则表达式搜索是构建灵活搜索的最佳方式,但我不会推荐使用忽略大小写正则表达式搜索('$ options':'i')。在使用忽略大小写的情况下,mongodb不能使用索引,并且必须检查导致性能较差的每个文档。
我的方法是在文档中为每个文档存储标准化搜索关键字添加一个新字段。我通常通过降低大小写并去除难以在正则表达式中处理的字符来标准化关键字 - 后者取决于您的数据和查询需求。开始的正则表达式匹配也使用更高效的索引。
查看此页面底部: http://docs.mongodb.org/manual/reference/operator/regex/