Text search_在聚集管道(Aggregation Pipeline)中使用文本搜索(Text Search)


  • 註冊用戶

    聚集管道(Aggregation Pipeline)中的文本搜索(Text Search)
    聚集管道操作中,可通过在$match阶段使用$text文本操作运算来实现文本搜索。

    限制
    在聚集管道中进行的文本搜索有以下限制:
    • $match阶段包含了$text, 且$text必须是管道(Pipeline)的第一步;
    • $text操作符只能在一个阶段中出现一次;
    • $text操作符不能出现在$or 或$not的表达式中;
    • 默认情况下,文本搜索不会按匹配分数的顺序返回匹配文档。若要实现可选择在 $sort 阶段使用 $meta 聚合表达式;

    文本得分(Text Score)
    操作符$text会对在索引字段中包含搜索词的每个文档打分 。所得分数反映了该文档与给定文本搜索查询的相关性。该分数就如同预测词(Projection Expression)一般,可以作为$sort管道详述的一部分。{$meta:"textScore"}表达式提供了有关$ text运算符操作过程中的有关信息,请参阅$ meta 以了解更多关于访问投影或排序得分的详细信息。

    元数据仅在包含$ text操作的$ match的后续阶段可用。

    实例
    以下示例中,假设在集合 articles 的 subject 键上有一个文本索引:

    db.articles.createIndex({subject:“text”})
    
    • 计算包含某个词的文章的总浏览量
      如下操作在$match阶段聚集搜索单词cake并在$group阶段计算匹配文档的views之和:
    db.articles.aggregate(  
     [   
        { $match: { $text: { $search: "cake" } } }, 
        { $group: { _id: null, views: { $sum: "$views" } } } 
     ]
    )
    
    • 返回以文本搜索得分排序后的结果
      如果需要根据文本搜索得分排序,可以在$sort阶段包含$meta表达式。
      以下例子中,查询匹配单词cake或tea的文档并以textScore按降序排序,最后在结果集中只返回title:
    db.articles.aggregate(
      [ 
         { $match: { $text: { $search: "cake tea" } } },
         { $sort: { score: { $meta: "textScore" } } },
         { $project: { title: 1, _id: 0 } } 
     ]
    )
    

    元数据决定了排序的顺序。例如,这里的元数据"textScore"按降序排序。若需了解更多元数据的信息,以及覆盖元数据默认排序顺序的示例,请参阅$meta。

    • 匹配文本分数
      元数据"textScore"可以用于排序,映射和$match阶段之后的条件,这里的$match阶段必须包含$text操作。
      下例中,查询匹配cake或tea的文档,映射title和score键,然后只返回那些score值大于1.0的文档:
    db.articles.aggregate(
     [  
        { $match: { $text: { $search: "cake tea" } } },
        { $project: { title: 1, _id: 0, score: { $meta: "textScore" } } },
        { $match: {score: { $gt: 1.0 } } }
    ] 
    )
    
    • 为文本搜索指定语言
      以下聚集分析以西班牙语在$match阶段搜索包含单词saber但不包含claro的文档,并在$group阶段计算匹配文档的views之和:
    db.articles.aggregate( 
     [ 
         { $match: { $text: { $search: "saber -claro", $language: "es" } } },
         { $group: { _id: null, views: { $sum: "$views" } } }
     ]
    )
    

  • 註冊用戶

    原文网址:https://docs.mongodb.com/manual/tutorial/text-search-in-aggregation/


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待