【问题标题】:mongodb full text search advice multiple wordsmongodb全文搜索建议多词
【发布时间】: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


【解决方案1】:

$and 仅在 1.9.x 中可用。

由于您使用的是 1.8.2,因此无法正常工作。

如果您升级,您将获得最新的命令集,并且您将能够使用 $and 命令。

【讨论】:

    【解决方案2】:

    MongoDB 2.6 现在可以使用 $text 命令结合 FTS 索引进行全文搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多