数据库的神操作
MongoDB的安装使用
MongoDB数据导入导出
MongoDB的全文检索
MongoDB在OMIM中实际应用(omimDataCol)
Mongodb的权限管理
MySQL安装教程-win10
MySQL操作(Linux)
本文档使用 MrDoc 发布
-
+
up
down
首页
MongoDB的全文检索
``` # 验证进入数据库 use pubmed db.auth('lvlh', 'meifen1028') # 查看已有的索引 db.pubmed21n1430.getIndexes() #可以看到结果文档中有 "name":"_id_" 的索引 # 对title字段建立全文索引 db.pubmed21n1430.ensureIndex({'title': 'text'}) db.pubmed21n1430.getIndexes() #可以看到结果文档中此时多了一个 "name":"title_text" 的索引 # 通过全文索引进行检索: db.pubmed21n1430.find({$text: {$search: 'human'}}) # 每次查询只能指定一个$text查询 ## 多条件查询。 例如:查询title中包含microtubule或junctions结果 db.pubmed21n1430.find({$text:{$search:"microtubule junctions"}}).count() ## 使用 -来排除该单词记录。如:查询title包含microtubule,而不包含junctions结果 db.pubmed21n1430.find({$text:{$search:"microtubule -junctions"}}).count() # 对多个字段进行索引构建 db.pubmed21n1430.ensureIndex({'abstract.text': 'text', 'title': 'text'}) #####报错,看到"ok":0,表示索引构建失败,原因是已经存在了全文索引了,一个集合只能创建一个全文索引 # 删除索引 db.pubmed21n1430.dropIndex("title_text") # 然后,对多个字段进行索引构建 db.pubmed21n1430.ensureIndex({'title': 'text', 'abstract.text': 'text'}) db.pubmed21n1430.getIndexes() ## 在单词前面加上\"来进行并列条件查询。如:查询title包含microtubule,且abstract.text中包含junctions结果 【失败】db.pubmed21n1430.find({$text:{$search:'\"microtubule \"junctions'}}).count() # 对title,abstract及mesh内容均建立全文搜索索引 db.pubmed21n1430.getIndexes() db.pubmed21n1430.dropIndex("title_text_abstract.text_text") ## 加权重进行多key全文索引构建 db.pubmed21n1430.ensureIndex({ 'title': 'text', 'abstract.text': 'text', 'keywords': 'text', 'mesh.descriptor.name': 'text' }, {weights:{ 'title': 30, 'abstract.text': 30, 'keywords': 20, 'mesh.descriptor.name': 20} }) # 循环对所有col开头的集合重新构建全文索引 var collectionNames = db.getCollectionNames(); for(var i = 0, len = collectionNames.length; i < len ; i++){ var collectionName = collectionNames[i]; if(collectionName.indexOf('col') == 0){ varindexLen = db[collectionName].getIndexes().length; if(indexLen == 2){ db[collectionName].dropIndex("title_text_abstract.text_text_keywords_text_mesh.descriptor.name_text") print(collectionName, indexLen); } sucess = db[collectionName].ensureIndex({ 'title': 'text', 'abstract.text': 'text', 'keywords': 'text', 'mesh.descriptor.name': 'text' }, {weights:{ 'title': 30, 'abstract.text': 30, 'keywords': 20, 'mesh.descriptor.name': 20}}); print(collectionName, sucess.ok); } } ## 【示例】检索calcium-ion内容且输出检索得分 db.getCollection('pubmed21n1430').find({"$text": {"$search": "calcium-ion"}}, {"score": {"$meta": "textScore"}}) ## 【示例】查询"human"返回的结果按照文档得分{"$meta": "textScore"}排序$sort,选择要显示的字段$project,以及限制的行数$limit db.getCollection('pubmed21n1430').aggregate([ {"$match": {"$text": {"$search": "human"}}}, {"$sort": {"score": {"$meta": "textScore"}}}, {"$project": {"_id": 0, "id": 1, "title": 1, "abstract": 1, "keywords": 1, "mesh": 1, "score": {"$meta": "textScore"} } }, {"$limit": 50} ]) ## 【示例】查询多条件如"GJB2"且包含词组"Frequent cause",需要用\"\"对所有要查询的关键词进行包括 db.getCollection('col289').aggregate([ {"$match": {"$text": {"$search": '\"GJB2\" \"Frequent cause\"'}}}, {"$sort": {"score": {"$meta": "textScore"}}}, {"$project": {"_id": 0, "id": 1, "title": 1, "abstract": 1, "keywords": 1, "mesh": 1, "score": {"$meta": "textScore"} } }, {"$limit": 50} ]) ## 【示例】查询具有SLC25A13基因且具备表型“Cholestasis”的文献 db.getCollection('col289').find({"$text": {"$search": '\"SLC25A13\" \"Cholestasis\"'}}) # 查询同时包含多个关键词,则使用双引号将关键词括起来,表示与的关系。 db.getCollection('col289').find({"$text": {"$search": '"therapeutic" "efficacy" "erlotinib"'}}) # 【示例】同时在多个集合里进行检索 var collectionNames = db.getCollectionNames(); for(var i = 0, len = collectionNames.length; i < len ; i++){ var collectionName = collectionNames[i]; if(collectionName.indexOf('col') == 0){ print(collectionName, db[collectionName].find({}).count()); #统计各个集合文档总数 } } # 【示例】查询必须出现的词 # 列出数据库的所有索引 db.getCollectionNames().forEach(function(collection){ indexes = db[collection].getIndexes(); print("Indexes for " + collection + ":" ); printjson(indexes); }); #python中使用: import pymongo #myclient = pymongo.MongoClient("mongodb://localhost:27017/") host = '127.0.0.1'; port = 27017 myclient = pymongo.MongoClient(host, port) pubmed = myclient.pubmed pubmed.authenticate('lvlh', 'meifen1028') col233 = pubmed['col233'] # for pmid in 23300000~23399999 ??? ``` ## 应用案例2:MalaCards疾病库(只有一个集合~2w条数据) ``` # 验证进入数据库 use bioDB db.auth('lvlh', 'meifen1028') db.getCollection('MalaCards_Diseases').ensureIndex({ "title": "text", "summaries": "text", "symptoms": "text"} }) # 应用查询: db.getCollection('MalaCards_Diseases').aggregate([ {"$match": {"$text": {"$search": '\"SLC12A3\" \"Hypokalemia\" \"Hypomagnesemia\" \"Generalized muscle weakness\"'}}}, {"$sort": {"score": {"$meta": "textScore"}}}, {"$project": {"_id": 0, "title": 1, "MCID": 1, "summaries":1, "gene":1, "externalIds": 1, "symptoms": 1, "score": {"$meta": "textScore"} } }, {"$limit": 50} ]) ```
laihui126
2023年10月18日 16:36
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅道文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅道文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅道文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
下载Markdown文件
分享
链接
类型
密码
更新密码