PyMongo:子串匹配独立于单词顺序

时间:2017-02-20 12:04:40

标签: mongodb pymongo

我需要使用pymongo MongoDB进行字符串搜索,检查键中的子串匹配,与单词order和case无关。

我们来看一个例子。

在我的馆藏中有以下文件:

{'_id':..., 'key': 'the foo'}
{'_id':..., 'key': 'the bar'}
{'_id':..., 'key': 'the baz'}

如果我在'key'中搜索了'Fo tHe''foo t''foo the'key,我想获得{'_id':..., 'key': 'the foo'}。< / p>

我找到的最佳解决方案是以这种方式通过pymongo使用正则表达式:

query = {'key': {'$regex' : my_string, '$options':'i'}}
mycollection.find(query)

但是这个解决方案并不完全涵盖我的要求。例如,如果my_string = 'foo the'(反向词序),它不会返回文档。

有没有一种有效的方法在pymongo(MongoDB)中执行这种文本搜索?

1 个答案:

答案 0 :(得分:1)

尝试全文索引:

mycollection.create_index([("foo", "text")])

做一次,然后:

for doc in mycollection.find(
    {"$text": {"$search": "foo the"}}
).sort({"score": {"$meta": "textScore"}}):
    print(doc)

请参阅MongoDB Text Indexessort by meta