Node.js MongoDb全文搜索和条件

Node.js MongoDb全文搜索和条件,node.js,mongodb,mongoose,full-text-search,Node.js,Mongodb,Mongoose,Full Text Search,我尝试在mongodb中使用文本索引: {$text:{$search:'sport hockey'}} 是通过短语“sport”或“hockey”搜索的用途或条件。例如,结果可以是以下标题列表: 今天做点运动 运动就是曲棍球 曲棍球运动员 最相关的文档位于第二个位置(实际上我想排除除此之外的所有其他结果:“运动就是曲棍球”)。 是否可以在$text中使用和条件 引号不合适,因为{$text:{$search:“\'sport hockey\”“}}使用精确匹配搜索。文本搜索不提供开箱即用。

我尝试在mongodb中使用文本索引:
{$text:{$search:'sport hockey'}}

是通过短语“sport”或“hockey”搜索的用途或条件。例如,结果可以是以下标题列表:

  • 今天做点运动
  • 运动就是曲棍球
  • 曲棍球运动员
最相关的文档位于第二个位置(实际上我想排除除此之外的所有其他结果:“运动就是曲棍球”)。 是否可以在$text中使用和条件


引号不合适,因为
{$text:{$search:“\'sport hockey\”“}}
使用精确匹配搜索。

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

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

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


  • 尝试在输出中包含textScore,然后按其排序以获得最相关的文档(也可以使用limit来获得前n个相关文档)

    使用如下

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

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


    对于再次访问此线程的任何人,可以使用以下查找查询实现所需的搜索条件“和”

    {$text:{$search:"\"sport\" \"hockey\""}}
    
    注意不同的单词是如何转义的

    在NodeJS中,可以执行以下操作来创建“AND”条件的desire搜索文本

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

    searchText = '"' + userInput.split(" ").join('" "') + '"';
    
    collectionObj.find({$text:{$search:searchText}})