【问题标题】:MongoDB excluding exact match from text searchMongoDB 从文本搜索中排除完全匹配
【发布时间】:2018-01-23 01:27:05
【问题描述】:

我正在使用 MongoDB 的全文搜索功能在我的数据库中搜索特定字符串。但是,当我使用 $search 运算符(我使用的是 MongoDB 的本机 Node.js 驱动程序)时,我知道会提供最佳匹配的结果根本不会出现。例如,我有一个字符串“CSCE-314:编程语言”。数据库中没有其他字符串包含“CSCE-314”。但是,当我搜索“CSCE-314”时,我得到包含“CSCE”或“314”的结果,但没有包含“CSCE”“314”的结果:

搜索查询如下:

{
   "$text": {
      "$search": "CSCE-314"
   }
}

我已经仔细检查了集合中是否存在匹配的文档。

那是什么?

编辑:我已经包含了我的 Mongo shell 命令和结果。很明显,search 集合包含“CSCE-314”。

编辑 2:包括搜索结果。

【问题讨论】:

  • mongo Shell 是否返回文档?你能把查找文档和查询结果也贴出来吗?
  • @Saravana 编辑得更清楚一点。
  • { "$text": { "$search": "CSCE-314" } } 在 mongo CLI 中的结果?
  • @Saravana 现在包括在内。

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


【解决方案1】:

Mongodb 查找搜索中指定的任何单词。假设您有 3 个文档。

{txt:"frog"}
{txt:"worm"}
{txt:"frog worm"}

如果您搜索“from worm” - mongodb 将返回所有 3 个文档。因为它们都包含您搜索中指定的一些单词。 要查找确切的字符串,您可以使用引号:'"word1 word2" word3'

所以下一个查询将只返回一个文档:

DB.my_collection.find({$text: {$search: '"frog worm"'}}); // notice double quotes

【讨论】:

    【解决方案2】:

    在您的架构中为您要执行搜索操作的字段定义String

    【讨论】:

    • 我正在使用 MongoDB 的本机驱动程序。根据MongoDB documentation,每个搜索文档中的name字段被索引为文本字段,这意味着它应该是可搜索的
    • 我已将text 用于我想要执行search Operation 的字段,这让我遇到了一个错误。但对于String,它正在工作。试一试。
    【解决方案3】:

    我是个白痴。之后我包括了一些额外的操作,其中一个操作是在将提供的光标转换为基于分数的排序数组之后,执行以下操作:

    sortedCursorArray.splice(10)

    提取数组索引10之后的所有结果。

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 2019-09-22
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多