使用Mongo,可以使用以下内容:
> db.posts.find("this.text.indexOf('Hello') > 0")
但是对于pymongo,执行以下操作时:
for post in db.posts.find("this.text.indexOf('Hello') > 0"):
print post['text']
发生了错误。
我认为Full Text Search in Mongo在这个例子中是更好的方法,但是可以在pymongo中使用“find”方法和“javascript”查询吗?
答案 0 :(得分:6)
你是对的 - 你可以使用$ where子句[1]:
在服务器端javascript中执行此操作db.posts.find({"$where": "this.text.indexOf('Hello') > 0"})
除了分片设置之外,其他所有设置都可以使用,但由于您将检查集合中的所有文档,因此这样做的成本会被视为过高,这就是为什么它通常不被认为是一个好主意。
您还可以进行正则表达式搜索:
db.posts.find({'text':{'$regex':'Hello'}})
这也会进行完整的集合扫描,因为正则表达式没有被锚定(例如,如果您锚定正则表达式,请重新检查字段是否以值开始在该字段上有一个索引可以使用索引。)
鉴于这两种方法价格昂贵且不能很好地执行或扩展,那么最好的方法呢?
您提供的链接[2]中描述的全文搜索方法效果很好。创建一个_keywords字段,将关键字存储为数组中的小写,索引该字段,然后您可以这样查询:
db.posts.find({"_keywords": {"$in": "hello"});
这将扩展和利用一个索引,因此将具有高效性。
[2] http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo