我正在尝试向我的网站添加搜索选项,但它不起作用。我查找了解决方案,但它们都指的是使用实际的字符串,而在我的情况下,我使用的是变量,而我无法使这些解决方案起作用。这是我的代码:
cursor = source.find({'title': search_term}).limit(25)
for document in cursor:
result_list.append(document)
不幸的是,这只会返回与search_term变量的值完全匹配的结果。我希望它返回标题包含搜索词的任何结果 - 无论它包含什么其他字符串。如果我想将变量传递给它,而不是实际的字符串,我该怎么办呢?感谢。
答案 0 :(得分:1)
您可以使用$regex
执行包含搜索。
cursor = collection.find({'field': {'$regex':'regular expression'}})
并使其不区分大小写:
cursor = collection.find({'field': {'$regex':'regular expression', '$options':'i'}})
请尝试cursor = source.find({'title': {'$regex':search_term}}).limit(25)
答案 1 :(得分:0)
您可以使用$text
&进行文字搜索。 $search
。首先需要设置文本索引,然后使用它:
$ db.docs.createIndex( { title: "text" } )
$ db.docs.find( { $text: { $search: "search_term" } } )
您也可以使用$regex
,如下所示:https://stackoverflow.com/a/10616781/641627
$ db.users.findOne({"username" : {$regex : ".*son.*"}});
...对于只有a的查询,正则表达式搜索需要更长时间 在全文搜索变得更快且清晰的情况下,几乎没有结果 在那些情况下优越。