我需要使用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)中执行这种文本搜索?
答案 0 :(得分:1)
尝试全文索引:
mycollection.create_index([("foo", "text")])
做一次,然后:
for doc in mycollection.find(
{"$text": {"$search": "foo the"}}
).sort({"score": {"$meta": "textScore"}}):
print(doc)