mongodb文本搜索

这几天做app,绕不开搜索,在没有看mongodb文档的情况下,胡思乱想了半个小时该怎么处理文本搜索,没想到官网对于文本搜索有非常详尽的说明,不看官方文档的码农就是少根筋。本文基本按照官网的文本搜索部分翻译,如有错,请各位批评指正!

要在mongodb中使用文本搜索,必须使用text索引和$text操作,下面的例子演示了如何创建text索引并且用它进行文本搜索。假设collection存储的数据如下例所示:

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中做文本搜索,必须要创建文本索引。文本索引建立在collection上,一个collection最多只能建立一个文本索引,文本索引可以cover多个域。如要在上例中的name和description中搜索文本,则可建立文本索引:

db.stores.createIndex( { name: "text", description: "text" } )

$text操作

在建立文本索引的基础上,我们可以实施文本操作,如下例在name和description中寻找包括java或coffee或shop的文档,这里的$text表示或操作。

db.stores.find( { $text: { $search: "java coffee shop" } } )

当然,也有更精确的搜索操作,如下例中精确寻找包含java或coffee shop的文档

db.stores.find( { $text: { $search: "java \\\\"coffee shop\\\\"" } } )

mongodb还提供了排除操作,如下例中的寻找包含java或coffee,但不包括coffee的文档

db.stores.find( { $text: { $search: "java shop -coffee" } } )

在很多情况下,我们需要对搜索的结果进行排序,mongodb也为我们提供了这种排序机制,如下例中所示

db.stores.find( { $text: { $search: "java coffee shop" } }, { score: { $meta: "textScore" } } ).sort( { score: { $meta: "textScore" } } )

其实,mongodb对于一般的app中的搜索而言已经足够,在并发度不高的情况下,直接使用即可。如果并发度偏高,可以借助缓存的形式,对常用的搜索关键字,在内存中建立到排表,提升访问效率。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,845评论 18 139
  • 索引(index) 索引 index经常用于常用的查询,如果设计得好,在创建索引之后的查询会有提升效率的效果。但是...
    我看不见阅读 3,281评论 0 6
  • 说到女神,大家脑海里第一个想到谁?林志玲?刘亦菲?自己的妈妈?还是自己的老婆?开个玩笑,这不是一个问题,也不是本文...
    心彻阅读 387评论 3 1
  • 今天已是来运城国际学校的第四天了,也慢慢地和老师们熟识起来。今天中午吃饭时和教音乐的曹老师还说起禹州,她摇摇头说不...
    张毛丽阅读 779评论 0 1
  • 为何你愿作一个路人,却不愿停下脚步让别人成为你的路人? 不由得想起一首小诗,其中有一句是这么写的,“你装饰了别人的...
    耿彪阅读 351评论 0 1