MongoDb全文搜索和条件

时间:2015-04-09 10:53:54

标签: node.js mongodb mongoose full-text-search

我尝试在mongodb中使用text-index: {$text: {$search: 'sport hockey'}}

使用OR条件按短语搜索:' sport'或者曲棍球'。例如,结果可以是以下标题列表:

  • 今天运动一下......
  • 运动是曲棍球
  • 曲棍球运动员

最相关的文件是第二个位置(实际上我想排除除了这个之外的所有其他结果:'运动是曲棍球')。 是否可以在$ text中使用AND条件?

引号不适合,因为{$text: {$search: "\"sport hockey\""}}使用完全匹配的搜索。

4 个答案:

答案 0 :(得分:2)

尝试在输出中包含textScore,然后按它排序以获取最相关的文档(可选择使用限制来获取相关文档)。

db.your_collection.find(
  {
    $text: { $search: "sport hockey" }
  }, {
    score: { $meta: "textScore" }
  }
).sort(
  {
    score: { $meta: "textScore" }
  }
).limit(2)

答案 1 :(得分:1)

文本搜索不提供这种开箱即用的功能。但是有两种可能的解决方法。

  1. 使用2.6之前的解决方案进行文本搜索:将文本字段分成单个单词,并将单个单词作为数组保存在同一文档中。然后,您可以对该阵列执行$all查询。

  2. 对每个单词执行单独的文本搜索,并在应用程序层上生成集合交集。

答案 2 :(得分:0)

用作关注

db.your_collection.find({$ text:{$ search:'“ sport”“ hockey”'}})

必须包含“文本”类型的搜索词!

答案 3 :(得分:0)

对于再次进入该线程的任何人,都可以使用以下查找查询来实现所需的“ AND”搜索条件

{$text:{$search:"\"sport\" \"hockey\""}}

请注意如何将不同的单词转义。

在节点js中,可以执行以下操作来为“ AND”条件创建所需的搜索文本

searchText = '"' + userInput.split(" ").join('" "') + '"';

然后

collectionObj.find({$text:{$search:searchText}})