【问题标题】:Mongo Db search by indexed fieldMongodb按索引字段搜索
【发布时间】:2016-11-23 16:04:45
【问题描述】:

我将字段“search_string”添加到我的文档并为其编制索引。 db.my_collection.createIndex({search_string: "text"}) Search_string 包含:'a ar are arena'。

我可以找到记录:db.my_collection.find({$text: {$search: 'ar'}})db.my_collection.find({$text: {$search: 'аren'}})db.my_collection.find({$text: {$search: 'arenа'}}),但db.my_collection.find({$text: {$search: 'а'}})db.my_collection.find({$text: {$search: 'аre'}}) 什么也没返回。为什么会这样?

【问题讨论】:

    标签: mongodb search full-text-search


    【解决方案1】:

    来自 MongoDB manual

    匹配操作

    停用词

    $text 运算符忽略特定语言的停用词,例如英语中的 and 和。

    “a”和“are”都在默认英语停用词列表中,因此将被忽略。用谷歌快速搜索英语停用词会找到很多包含完整列表的页面。

    【讨论】:

    • 我怎么能忽略这句话?
    • 再次从手册中“搜索不同的语言 使用 $text 表达式中的可选 $language 字段来指定一种语言,该语言确定停用词列表以及用于搜索的词干分析器和标记器的规则“所以我猜想将 $language 指定为 none 可能会这样做。
    • $language: "none" - 没有帮助
    【解决方案2】:

    默认情况下,MongoDB 使用英文进行文本索引,停用词不被索引。

    如果您将语言值指定为“none”,则文本搜索使用简单的标记化,没有停用词列表,也没有词干。

    所以你应该像这样创建你的索引:

    db.my_collection.createIndex( { search_string : "text" }, { default_language: "none" } )

    MongoDB 文档here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-20
      • 2012-08-30
      • 2022-01-25
      • 1970-01-01
      • 2011-08-28
      • 2020-07-20
      • 2019-02-06
      • 1970-01-01
      相关资源
      最近更新 更多