美文网首页
Mongodb文本搜索

Mongodb文本搜索

作者: RareXray | 来源:发表于2019-05-15 13:48 被阅读0次

近日用mongodb做文本搜索遇到一个问题。针对国外的人的姓名搜索,之前的中文名完全匹配的搜索不能用了。

比如我们想Jon Snow 和 Snow Jon都能搜到,但名单库里,他的名字是有mid name的,比如Jon Aegon Snow。这样,以前的match方式,是完全搜不到的。

想过用正则$regex,超级慢。。。

幸好发现了全文搜索。$text

db.persons.createIndex({"NameValue":"text"}) // 建立索引
几种常用搜索

简单的搜索
db.persons.find({$text:{$search:"Jon"}})

多关键词搜索,注意这种搜索是 or的关系,有index 或者 有 operator都可以,所以,这个搜索会出来 Jon Snow,Jon Bon Jovi, Don Jon 等好多名字,而且 Jon Aegon Snow还不一定能出现在第一个
db.persons.find({$text:{$search:"Jon Snow"}})

有Jon 但是没有Don的
db.persons.find({$text:{$search:"Jon -Don"}})

搜索包含Jon Snow的词组。用这个搜索,我发现就出不来了。 因为我们的库里面的词组是Jon Aegon Snow
db.persons.find({$text:{$search:"\"Jon Snow\""}})

所以我以为是评分的问题,加了下评分权重的排序。
db.persons.find( {$text:{$search:"Jon Snow"}}, {score:{$meta:"textScore"}} ).sort({score:{$meta:"textScore"}})

然并卵,Jon Snow还是不一定能排到最前面,我有点懵逼了
难道没有办法了么。我已经开始找ES的资料了,妄图用es和mongodb连接起来用。

万幸,我在一个答案中找到了结果。

使用两个短语,这就是一个逻辑上的AND关系,完美。假如你要使用mongodb 多个字符串匹配的查询,就用这个。不过,据说对中文分词不行。
db.persons.find({$text:{$search:"\"Jon\"\"Snow\""}})

当然,假如搜索 You know nothing,应该是搜索不到 Jon Snow的

就酱

以上的案例均为虚构,如有侵权请联系作者。

参考文档:

  1. https://www.jb51.net/article/112641.htm MongoDB学习之Text Search文本搜索功能
  2. mongodb官方文档-$text搜索 (https://docs.mongodb.com/manual/reference/operator/query/text/)
  3. MongoDB text search logical AND

相关文章

  • mongodb文本搜索

    这几天做app,绕不开搜索,在没有看mongodb文档的情况下,胡思乱想了半个小时该怎么处理文本搜索,没想到官网对...

  • Mongodb文本搜索

    近日用mongodb做文本搜索遇到一个问题。针对国外的人的姓名搜索,之前的中文名完全匹配的搜索不能用了。 比如我们...

  • MongoDB全文搜索 --- 2022-04-03

    本章节,介绍MongoDB的全文搜索,区别于SQL的Like,MongoDB的全文搜索对于文本搜索效率要高于SQL...

  • springboot 2.0 + elasticsearch 5

    前一阵子准备为项目搭建一个简单的搜索服务,虽然业务数据库mongodb提供了文本搜索的支持,但是在大量文档需要通过...

  • MAMP环境安装mongodb扩展

    搜索可用的mongodb组件 brew search mongodb 根据本机php版本安装对应的mongodb ...

  • 使用Docker和Elasticsearch搭建全文本搜索引擎应

    给应用添加快速、灵活的全文本搜索对谁都不是一件容易的事情。许多主流数据库,如PostgreSQL和MongoDB,...

  • Docker 安装MongoDB

    1、搜索mongo 安装的版本为:MongoDB server version: 4.2.3 MongoDB视图软...

  • 文本搜索

    搜索包含关键字的行 会将所有包含关键字的行均输出,有时候只需要输出匹配的最后几行: 当然,我们可以在grep 后面...

  • 文本搜索

    To perform text search, MongoDB uses a text index and the...

  • Centos:服务自启

    一、编写脚本 mongodb.sh脚本文本内容 备注:#start mongodb service下为启动某服务的...

网友评论

      本文标题:Mongodb文本搜索

      本文链接:https://www.haomeiwen.com/subject/cffpaqtx.html