MongoDb 全文搜索 AND 条件

MongoDb fulltext search AND condition

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

是使用 OR 条件按词组搜索:'sport' OR 'hockey'。例如,结果可以是以下标题列表:

最相关的文档在第二位(实际上我想排除除此以外的所有其他结果:'Sport is hockey')。 是否可以在 $text 中使用 AND 条件?

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

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

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

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

尝试在输出中包含 textScore,然后对其进行排序以获得最相关的文档(可选择使用限制来获取前 n 个相关文档)。

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

作为关注

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

"text" type search word must be included!

对于再次访问此线程的任何人,可以使用以下查找查询

来实现所需的 "AND" 搜索条件
{$text:{$search:"\"sport\" \"hockey\""}}

注意不同单词的转义方式。

在节点 js 中,可以执行以下操作来为 "AND" 条件

创建所需的搜索文本
searchText = '"' + userInput.split(" ").join('" "') + '"';

然后

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