mongoDB v2.4 使用全文索引

12 篇文章 0 订阅

mongoDB2.4新增的全文索引的支持:现在把官方教程翻译过来:

开启全文索引

可以在脚本中声明启用:

db.adminCommand( { setParameter : 1, textSearchEnabled : true } )

修改配置启用:

mongod --setParameter textSearchEnabled=true

创建一个全文索引

为特定字段加索引:

db.collection.ensureIndex( { subject: "text", content: "text" })

为所有字段加索引:

db.collection.ensureIndex( { "$**": "text" },{ name: "TextIndex" })

在文本里查询内容

搜索一个词:

db.quotes.runCommand( "text", { search: "TOMORROW" } )
因为文本命令是不区分大小写的,文本搜索将引用集合匹配以下文档:

{
  "_id" : ObjectId("50ecef5f8abea0fda30ceab3"),
  "quote" : "tomorrow, and tomorrow, and tomorrow, creeps in this petty pace",
  "related_quotes" : [
                       "is this a dagger which I see before me",
                       "the handle toward my hand?"
                     ],
  "src" : {
            "title" : "Macbeth",
            "from" : "Act V, Scene V"
          },
  "speaker" : "macbeth"
}

搜索匹配的词:

db.quotes.runCommand( "text", { search: "tomorrow largo" } )

命令会匹配收集下列文件:

{
  "_id" : ObjectId("50ecef5f8abea0fda30ceab3"),
  "quote" : "tomorrow, and tomorrow, and tomorrow, creeps in this petty pace",
  "related_quotes" : [
                       "is this a dagger which I see before me",
                       "the handle toward my hand?"
                     ],
  "src" : {
            "title" : "Macbeth",
            "from" : "Act V, Scene V"
          },
  "speaker" : "macbeth"
 }

 {
   "_id" : ObjectId("50ecf0cd8abea0fda30ceab4"),
   "quote" : "Es tan corto el amor y es tan largo el olvido.",
   "related_quotes" : [
                        "Como para acercarla mi mirada la busca.",
                        "Mi corazón la busca, y ella no está conmigo."
                      ],
   "speaker" : "Pablo Neruda",
   "src" : {
             "title" : "Veinte poemas de amor y una canción desesperada",
             "from" : "Poema 20"
           }
  }

匹配短语:

db.quotes.runCommand( "text", { search: "\"and tomorrow\"" } )
下面是带有必有字符的短语

db.quotes.runCommand( "text", { search: "corto largo \"and tomorrow\"" } )

匹配一些词但是不能包含指定的词:

下面会匹配tomorrow, 但是不能含有petty

db.quotes.runCommand( "text" , { search: "tomorrow -petty" } )

限制结果集条目:

db.quotes.runCommand( "text", { search: "tomorrow", limit: 2 } )

在结果集中指定返回的字段:

下面只有_id 和 src字段会被返回(不知道为什么会_id也返回了, 回去先了解一个Mongo的基础知识. )

db.quotes.runCommand( "text", { search: "tomorrow",project: { "src": 1 } } )
设置为1 会返回, 0 不会返回.

带额外查询条件的搜索:

db.quotes.runCommand( "text", { search: "tomorrow", filter: { "speaker" : "macbeth" } } )

使用特定语言搜索文本:

db.quotes.runCommand( "text", { search: "amor", language: "spanish" } )

为全文索引选择一种语言

指定默认的语言:

db.collection.ensureIndex( { content : "text" }, { default_language: "spanish" })

支持的语言有:

danish
dutch
english
finnish
french
german
hungarian
italian
norwegian
portuguese
romanian
russian
spanish
swedish
turkish

如果指定value为"none", 那么搜索中不会设置分词,文本搜索不会阻止和标记搜索条件.

还有多语言查询,是指向到了一个引用,然后用一个语言覆盖查询. 这点有兴趣的可以去官方查看. 这里不复述.


长名称的全文索引

默认的索引名由各个索引字段和_text连接组成:如:

db.collection.ensureIndex( { content: "text", "users.comments": "text","users.profiles": "text"})
索引名为:content_text_users.comments_text_users.profiles_text

可以这样指定名称:

db.collection.ensureIndex(
                           {
                             content: "text",
                             "users.comments": "text",
                             "users.profiles": "text"
                           },
                           {
                             name: "MyTextIndex"
                           }
                         )

控制查询结果与权重

给字段的索引权重默认为1, 要修改,可以这样设置:

db.blog.ensureIndex(
                     {
                       content: "text",
                       keywords: "text",
                       about: "text"
                     },
                     {
                       weights: {
                                  content: 10,
                                  keywords: 5,
                                },
                       name: "TextIndex"
                     }
                   )

创建满足过滤组件的全文索引

附加标量字段索引, 指定一个提升的KEY:

db.quotes.ensureIndex(
   {
     comments: "text",
     cited: 1
   }
)
使用filter参数:

db.quotes.runCommand( "text",
   {
     search: "tomorrow",
     filter: { cited: { $gt: 10 } }
   }
)


-----------

下面是一个PHP执行mongo全文搜索的例子:

<?php

$m = new MongoClient(); // connect
$db = $collection = $m->foo; // get the database named "foo"
$collection = $db->bar; // get the collection "bar" from database named "foo"

$collection->ensureIndex(
    array(
        'title' => 'text',
        'desc' => 'text',
    ),
    array(
        'name' => 'ExampleTextIndex',
        'weights' => array(
            'title' => 100,
            'desc' => 30,
        ),
        'timeout' => 60000000
    )
);

$result = $db->command(
    array(
        'text' => 'bar', //this is the name of the collection where we are searching
        'search' => 'hotel', //the string to search
        'limit' => 5, //the number of results, by default is 1000
        'project' => Array( //the fields to retrieve from db
            'title' => 1
        )
    )
); 

print_r($result);


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片微型计算机(MCU)经过多年的发展,在性能上有很大的进步,在型号上发展到上千种类,已经广泛应用于人类社会生活的各个领域。单片机课程已经成为高校计算机、自动化、测控以及电子信息工程等专业的重要课程。该课程是一门理论性和实践性都很强的课程,在实际教学中,应将理论教学和实验教学紧密结合。学生在掌握理论知识之余,必须通过编写程序、设计硬件电路、仿真、调试这一系列的实验过程,才能更好地掌握单片机的结构原理和应用技能。随着单片机及其接口技术的飞速发展,目前市场上供应的编程仿真实验资源并不能完全满足高校单片机课程教与学的需求,构建低成本、技术先进、源码公开的单片机编程仿真实验系统,对我国单片机课程的教学和单片机领域人才的培养具有重要的现实意义。 本论文结合目前教学中对单片机编程仿真实验系统的实际需求,采用模块化结构设计思想,精心设计和开发了单片机编程仿真实验系统。该单片机编程仿真实验系统由PC机端单片机编程控制软件和单片机编程仿真实验板两部分组成。PC机端的单片机编程控制软件可以自动检测到连接到单片机编程仿真实验板上的单片机,控制单片机编程器擦除、写入、读出、校验目标单片机ROM中的程序,以十六进制文件(.HEX文件)格式显示在控制界面内;单片机仿真实验系统能够把写入单片机的程序实时地运行,并呈现实际运行效果。单片机编程控制软件和单片机仿真实验板组成一个完整的单片机编程仿真实验系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值