Text Search_概述


  • 註冊用戶

    文本搜索

    概述
    MongoDB支持对字符串内容的文本搜索的查询操作,为执行文本搜索,MongoDB使用文本索引(Text Index)和$ 文本操作符($text Operator)两种方式

    实例
    此实例演示如何在仅给出文本字段的情况下,构建文本索引,并使用它来查找咖啡店
    使用以下文档来创建一个商店的集合:

    db.stores.insert(
      [ 
        { _id: 1, name: "Java Hut", description: "Coffee and cakes" },
        { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" }, 
        { _id: 3, name: "Coffee Shop", description: "Just coffee" },
        { _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },  
        { _id: 5, name: "Java Shopping", description: "Indonesian goods" } 
    ]
    )
    
    • 文本索引
      MongoDB提供了文本索引来支持对字符串内容的文本搜索查询。 文本索引可以包括值为字符串或字符串数组的任何字段。
      要执行文本搜索查询,您的集合必须包含一个文本索引。 一个集合只能有一个文本搜索索引,但该索引可以覆盖多个字段。
      例如,您可以在mongo shell中运行以下命令以允许在名称和描述字段中进行文本搜索:
    db.stores.createIndex({name:“text”,description:“text”})
    
    • 文本操作符
      使用$ text查询运算符对带有文本索引的集合执行文本搜索。
      $ text将使用空格和常用的标点符号作为分隔符对搜索字符串进行标记,并对搜索字符串中的所有这些标记执行逻辑或运算。
      例如,您可以使用以下查询来查找包含“coffee”,“shop”和“java”列表中任何字词的所有商店:
    db.stores.find({$ text:{$ search:“java coffee shop”}})
    
    • 精确词组
      您也可以通过将其包含在双引号中来搜索确切的短语。 例如,以下示例将找到包含“java”或“coffee shop”的所有文檔:
     db.stores.find( { $text: { $search: "java\"coffee shop\"" } } )
    
    • 项目排除(Term Exclusion)
      要排除单词,可以在前面加上“ - ”字符。 例如,要查找包含“java”或“shop”但不包含“coffee”的所有商店,请使用以下命令:
    db.stores.find( { $text: { $search: "java shop -coffee" } } )
    
    • 排序(Sorting)
      默认情况下,MongoDB将以未排序的顺序返回其结果。 然而,文本搜索查询将计算每个文件的相关性分数(指定文件与查询匹配的程度)。
      要按相关性得分的顺序对结果排序,必须显式地投影$ meta textScore字段再对其排序:
    db.stores.find(
        {$text:{$ search:“java coffee shop”}},
        {score:{$ meta:“textScore”}}
    ).sort({score:{$ meta:“textScore”}})
    

    文本搜索也可在聚集管道(aggregation pipeline)中使用。

    语言支持
    MongoDB支持各种语言的文本搜索。 有关支持的语言列表,请参阅文本搜索语言


  • 註冊用戶

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


登录后回复
 

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