【发布时间】:2011-11-10 16:33:57
【问题描述】:
我正在尝试对我的一个 mongodb 集合(如flowdock)进行某种形式的全文搜索。 我为每个文档创建一个 _keywords 条目,并用该文档中其他字段的小写单词填充它。然后我像这样(前缀搜索)搜索它。 searchString = '汽车'
found_shots = connection.Shot.find({'_keywords': re.compile('^%s' % searchString.lower())}).limit(limit).skip(skip)
问题是当我尝试搜索多个单词时(例如 searchstring= ['car','online']
regex1 = re.compile('^%s' % searchStrings[0].lower())
regex2 = re.compile('^%s' % searchStrings[1].lower())
found_shots = connection.Shot.find({'$and':[{'_keywords':regex1},{'_keywords':regex2}]}).limit(limit).skip(skip)
那行不通。请问有什么想法吗?
【问题讨论】:
-
你运行的是哪个版本的mongo,因为$and只有1.9.x及以上
-
@Sammaye:1.8.2,你是对的。我的印象是我将它更新到 2.0 进行测试,但我没有。我的错。我的代码适用于 2.0 吗?这是一个好方法吗?坏的?除了运行 2 个不同的查询并在 python 中对它们进行 ANDing 之外,还有其他方法吗?
-
应该这样做,正则表达式对象可能不会,但如果不是,则只需将其替换为标准 // 字符串
-
是否有更好的方法取决于您正在执行的搜索查询的确切类型。如果您有意使用 $and 来连接这两个语句,那么是的,这是最好的,但更好的方法可能是 $or。
-
我正在从我的 extjs 前端在数据网格中进行实时搜索。基本上它适用于我在搜索框中输入的第一个单词(它会找到在 _keyword 字段中以搜索词开头的单词的所有行),然后我需要一个 and (查找在 _keyword 字段中的所有行以 word1 和 word2 开头的单词)
标签: python search mongodb full-text-search