精华内容
下载资源
问答
  • 国内三种常用中文数据库检索功能比较研究国内三种常用中文数据库检索功能比较研究[摘 要]针对国内常用中文数据库检索功能相似但又区别的情况,对比分析了CBMWEB、CMCC、CNKI 3个中文常用数据库检索途径、检索字段...

    国内三种常用中文数据库检索功能比较研究

    国内三种常用中文数据库检索功能比较研究

    [摘 要]针对国内常用中文数据库检索功能相似但又有区别的情况,对比分析了CBMWEB、CMCC、CNKI 3个中文常用数据库的检索途径、检索字段、截词符、精确检索、检索历史等功能,并给出实例,同时指出常见使用错误,以期方便用户清晰掌握各数据库的使用方法,同时为网络信息资源评价和建设提供依据。

    [关键词]数据库;检索;功能;比较研究

    DOI:10.3969/j.issn.1008-0821.2010.07.037

    [中图分类号]G250.7 [文献标识码]B [文章编号]1008-0821(2010)07-0129-03

    A Comparative Study on Retrieval Functions of Three Chinese DatabasesWang Ling

    (Library,Capital University of Medical Sciences,Beijing 100069,China)

    [Abstract]Based on three commonly used Chinese Database,CBMEEB,CMCC and CNKI,this paper indicated the differences and similarities according to the retrieval functions including retrieval channels,retrieval fields,wildcard,exactly search and so on.Examples and common mistakes were presented.The aim was to help users to grasp the functions and methods of databases,also to provided basis of assessment and instruction of network information resources.

    [Keywords]database;retrieval;function;comparative study

    随着互联网和计算机技术的普及和应用,国内外在线数据库剧增,数据库检索的主体由专业人士到普通民众,数据库检索已经成为人们获取信息的重要途径。但由于各数据库的结构不同、信息资源标引的规范和深度不同,各数据库的检索功能相似又有不同,用户使用时难以分辨和掌握,容易造成漏检或误检,并且增加了检索时间。以下通过对中国生物医学文献数据库网络版(CBMWEB)[1]、中文生物医学期刊数据库(CMCC)[2]、中国期刊全文数据库(CNKI)[3]这3个常用数据库检索途径、检索字段、截词符、精确检索等使用规则的详细辨析,帮助信息检索工作人员及广大用户提高检索效率。

    1 检索途径的比较

    3个中文数据库都提供多种检索途径,相同之处是都具有简单的菜单式检索[4],读者通过点击和选择菜单及利用检索窗口的功能键实现简单的检索,见表1。

    从表1中可以看出,CBM提供基本检索,CMCC提供自由词检索,CNKI提供初级检索,均可实现一步式检索,但具体的检索技术又稍有差别。除菜单式检索,CMCC和CNKI还提供命令检索,如CMCC的表达式检索、CNKI的专业检索。命令检索需要用户具备专业的检索技能,体现了对传统检索技术的综合运用, 可以弥补菜单对检索复杂问题的不足。CBM虽不具备命令式检索,但提供独特的分类检索和主题检索,能实现族性检索、保障查全率,这是其他两个数据库所不具有的特色。

    1.1 基本检索

    这3个数据库均提供多种检索途径,不同检索途径允许使用的检索技术如布尔逻辑算符、截词符等各不相同。以下就普通用户最常用的基本检索途径对这3个数据库做了比较,见表2。

    CBM的基本检索或CMCC的自由词检索可以实现输入词在几个字段同时检索,字段间关系为逻辑“或”。CNKI也可以实现此功能,但因为只能选择单个字段限定,因此需要选择不同字段,重复输入同一检索词后进行逻辑或运算。CBM和CMCC默认的检索字段也稍有差别。CMCC除包含中文题名、关键词、摘要外还包括外文题名,而CBM除此3个字段外还默认检索主题词、作者和刊名内容字段。

    CBM的基本检索或CMCC的自由词检索或CNKI的初级检索都允许一次输入若干检索词并默认所输入检索词之间为逻辑与关系。不同之处在于,CBM允许自由输入AND、OR、NOT组成检索式,如“H1N1 OR 甲流”,但CMCC或CNKI是通过选择输入框后的逻辑符号来实现,如果输入框中出现逻辑运算符则系统

    展开全文
  • 一、建表create table myindextest (tid varchar2(50) primary key,btext BLOB)二、建索引及参数1、中文分词及分词属性设置beginctx_ddl.create_preference('cnlex','CHINESE_LEXER');ctx_ddl.create_preference('...

    一、建表

    create table myindextest (tid varchar2(50) primary key,

    btext BLOB)

    二、建索引及参数

    1、中文分词及分词属性设置

    begin

    ctx_ddl.create_preference('cnlex','CHINESE_LEXER');

    ctx_ddl.create_preference('mywordlist','BASIC_WORDLIST');

    ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE');

    ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH',1);

    ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH',8);

    ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX','YES');

    END;

    2、设置中文过滤(中文编码)

    begin

    ctx_ddl.create_preference('cs_filter','CHARSET_FILTER');

    ctx_ddl.set_attribute('cs_filter','charset','UTF8');

    end;

    3、创建索引

    create index idx_myindextest on myindextest(btext)

    indextype is ctxsys.context

    parameters('DATASTORE CTXSYS.DIRECT_DATASTORE

    FILTER cs_filter

    LEXER CNLEX

    WORDLIST MYWORDLIST');

    三、查询

    1、查看分词情况

    SELECT * FROM dr$idx_myindextest$I

    2、通过关键词查询记录

    select * from myindextest where contains(btext,'正常')>0

    四、同步 优化

    begin

    Ctx_ddl.sync_index('idx_myindextest','2M');

    End;

    begin

    Ctx_dll.optimize_index('myidx','full');

    End;

    五、定时任务执行执行作业进行同步

    create or replace procedure sync

    is

    begin

    execute immediate

    'alter index idx_myindextest rebuild online' ||

    ' parameters ( ''sync'' )'

    execute immediate

    'alter index idx_myindextest rebuild online' ||

    ' parameters ( ''optimize full maxtime unlimited'' )'

    end sync;

    /

    Set ServerOutput on

    declare

    v_job number;

    begin

    Dbms_Job.Submit

    (

    job => v_job,

    what => 'sync;',

    next_date => sysdate, /* default */

    interval => 'sysdate + 1/720' /* = 1 day / ( 24 hrs * 30 min) = 2 mins */

    );

    Dbms_Job.Run ( v_job );

    Dbms_Output.Put_Line ( 'Submitted as job # ' || to_char ( v_job ) );

    end;

    展开全文
  • 本文研究对文章进行分词以提高检索的准确度和查询效率。根据自己的编程语言选择一款合适的中文分词组件,我在 ASP.NET 平台下选择了 jieba.NET。设想的步骤:分别对文章标题、标签、正文进行分词,保存到一张分词表...

    传统的 LIKE 模糊查询(前置百分号)无法利用索引,特别是多个关键词 OR,或在多个字段中 LIKE,更是效率低下。本文研究对文章进行分词以提高检索的准确度和查询效率。

    根据自己的编程语言选择一款合适的中文分词组件,我在 ASP.NET 平台下选择了 jieba.NET。

    设想的步骤:分别对文章标题、标签、正文进行分词,保存到一张分词表上。该表把“文章 ID”和“词语”设为联合主键,用 3 个字段记录该词语分别在标题、标签、正文中出现的次数,另外还可以按需要添加文章分类 ID、文章创建时间等字段。

    当用户输入关键词进行检索时,先将关键词分词,在分词表中用 in 语法查询到所有相关的记录;

    使用 group by 语法对查询结果按文章 ID 分组;

    关键在排序上,理想的排序是:

    a. 先按搜索关键词中不同词语的出现量排序,即:若搜索关键词分词后是 3 个词语,那么全部包含这 3 个词的文章优先,只匹配其中 2 个词语的其次;

    b. 再按搜索关键词在文中累计出现的次数排序(考虑权重),即:我们先假定标题和标签的分词权重为 5(意思是一个分词在标题中出现 1 次相当于在正文中出现 5 次),那么累加每个分词在标题、标签、正文的权重次数,得分高的优先;

    c. 再进一步考虑文章的发布时间,即将文章的发布时间距离最早一篇文章的发布时间(或一个较早的固定日期)相隔的天数,乘以一个系数加入到权重中,这个系数按不同文章分类(场景)不同,比如新闻类的大一点,情感类的小一点)。乘以系数时一篇文章只加权一次,不要加权到每个分词。

    d. 根据需求还可以加入文章热度(阅读数)的权重。

    根据上述逻辑对一个有 18 万篇文章的内容管理系统进行改造,循环所有文章进行分词统计,得到一张包含 5 千万条记录的分词表(系统中部分文章只有标题、标签和外链,没有正文,否则更多)。

    由于查询中包含 in、group by、count、sum、运算等,再若分类是无级限的,即文章分类 ID 也是 in 查询,然后分页,即使创建索引,效率也只能呵呵了。

    简化:

    不对正文进行分词;

    不按权重进行排序;

    那么分词表的记录数降到 250 万条,同样用 in 查询分词,先按搜索关键词中不同词语的出现量排序,再按发布时间排序,分页后获得一页的文章 ID 集合,再去文章表中 in 获取详细信息(注意保持一页中的排序)。

    添加相关索引后,查询一个包含 3 个分词的关键词仅需十几毫秒。因为 in 的内容比较离散,所以索引的利用率比较高。

    谢谢赞赏 ♥

    6e8abd549c150ef67819ab3cdf9e2d0b.png

    388ada51a6d8f546f960e50569971cce.png

    展开全文
  • 现在的互联网上,很多网站都提供了全文搜索功能,浏览者可以通过输入关键字或者是短语来搜索特定的资料。在PHP+MySQL构架的网站中,通常的做法是通过SELECT查询的Like语句来进行搜索,这一办法存在搜索不够精确、...

    现在的互联网上,很多网站都提供了全文搜索功能,浏览者可以通过输入关键字或者是短语来搜索特定的资料。在PHP+MySQL构架的网站中,通常的做法是通过SELECT查询的Like语句来进行搜索,这一办法存在搜索不够精确、以及效率非常低下的缺点。比如对一个有十几万条记录数据表的TEXT字段进行LIKE操作,可能会花费上近10秒钟左右,这对网站的浏览者来说是一个非常糟糕的使用体验。如何在海量的数据中能够快速的进行全文检索呢?MySQL提供了一个全文索引功能,也就是把字段设置上FULLTEXT索引属性,然后通过SELECT的MATCH AGAINST语句进行查找。

    我们开发的一个纯英文站点TouchUs - The Global Yellow Pages & Business Directory(www.touchus.org)就是利用MySQL的这一功能,实现了对十多万条数据的平均全文检索时间小于0.5秒。但是在开发 TouchUs的中文网站——城市黄页网时(www.city39.cn),碰到了新的问题。原来英文排版时词和词之间是通过空格区分的,FULLText可以完全支持,但是对中文或者是东亚文字就没有这么简单了,因为中文的词和词之间并没有明显的分隔,所以MySQL不支持中文字符的全文检索。

    如何让MySQL也能支持中文的全文检索呢?偶然间产生了一个思路,那就是能不能在中文分词后,通过对中文进行编码转化成英文字符,这样就在中英文间建立一个特定的联系,然后再进行全文检索,这样不就实现了中文的全文索引了吗?经过试验,答案是肯定的。下面是在城市黄页网中实现的具体过程:

    1. 建立一个单独的索引表,比如对应members表,我们建立一个members_index表。

    用户信息表(members)                    用户信息全文索引表(members_index)

    User_id                                              user_id

    User_name                                       index_intro

    User_introduction

    在members_index表的index_intro中加入fulltext索引。

    2. 对用户信息表(members)的User_introduction字段内容进行中文分词处理

    中文分词的处理过程,可以参考简易中文分词系统http://www.ftphp.com/scws/,在城市黄页网中,我们采用了scws的 PHP扩展模块方式来实现中文分词。scws的php扩展模块安装非常简单,只需简单编译配置后即可使用。在具体的php代码中,我们写了如下的函数来实现分词后将分词结果用空格进行连接。

    //中文分词函数

    function str_fc($str) {

    $so = scws_new();

    $so->set_charset('utf8');

    // 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件

    $so->send_text($str);

    while ($tmp = $so->get_result())

    {

    foreach (  $tmp as $ss ){

    $s = trim($ss[word]);

    if ( $s )

    $mystr .= trim($ss[word]) . " ";

    //echo urlencode(trim($ss[word])) . " ";

    }

    }

    return $mystr;

    }

    该函数返回就是用空格连接的分词结果。

    3. 对分词结果进行编码,可以采用多种编码方式,比如base64编码、urlencode编码、汉字转拼音等,对gb2312甚至可以采用区位码编码方式。考虑到存储空间以及便利性,我们采用了PHP的urlencode编码方式。需要注意的是,在编码前,我们可以去掉重复的分词来节约存储空间,编码后要去掉编码结果中的%符号,因为urlencode采用RFC 1738进行编码,会产生很多%,而%在MySQL是通配符。下面是编码过程用到的PHP代码

    $data = str_fc($data);  //中文分词

    $data = array_filter(explode(" ",$data)); //删除数组空项

    $data = array_flip(array_flip($data));  //删除重复项

    //对分词结果进行urlcode编码

    foreach (  $data as $ss ) {

    if (strlen($ss)>1 )

    $data_code .= str_replace("%","",urlencode($ss)) . " ";

    }

    这里的$data_code就是编码后的结果。把编码结果根据user_id存入用户信息全文索

    引表(members_index)

    4. 在进行搜索处理时,首先对用户输入的关键字进行同样的分词编码处理,然后通过MySQL的SELECT的MATCH  AGAINST语句进行全文快速检索,根据检索结的user_id即可调用用户信息表(members)中的原始数据进行显示,而没有必要进行一次解码重组。

    以上MySQL UTF8中文全文检索方法,目前在我们的2个中文网站——城市黄页网(www.city39.cn)和企业供求信息网(www.myglobalmarket.cn)中运行良好,平均检索时间均小于0.5秒。

    展开全文
  • 数据库 全文检索

    千次阅读 2021-01-19 11:12:38
    一、概述MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。二、语法MATCH (col1,col2,...) AGAINST (expr [search_modifier])search_modifier: { IN BOOLEAN ...
  • MySQL中文全文检索

    2021-01-18 23:15:07
    一、概述MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。二、语法例如:SELECT * FROM tab_name WHERE MATCH ('列名1,列名2...列名n') AGAINST('词1 词2 词3 ....
  • 由于MYSQL仅支持英文的全文索引FULLTEXT,不支持中文,因为中文不能像英文那样通过空格来准确的判断单词,而需要通过语义来判断,这就需要我们对中文进行切词。但是我们可以通过另一种方式来曲线解决这一问题。项目...
  • 学术检索数据库总结

    千次阅读 2021-01-05 10:13:33
    学术检索数据库总结 一、中文数据库介绍 1、中国知网 期刊论文、博士论文、会议论文、学术的毕业论文等 中国最主要中文期刊、学位论文库之一。由清华大学、清华同方发起,始建于1999年6月。除了大量的医学文献...
  • 摘要:本书是一部关于常用文献信息数据库检索的实用指南,在扼要介绍计算机信息检索基本原理知识的精华部分一计算机信息检索技术的基础上,重点对当前常用的一些中外文文献信息的光盘和网络数据库进行了全面系统的介绍...
  • 在 MySQL下,在进行中文模糊检索时,经常会返回一些与之不相关的记录,如查找 "%a%" 时,返回的可能有中文字符,却没有a字符存在。本人以前也曾遇到过类似问题,经详细阅读MySQL的Manual,发现可以一种方法很方便...
  • 计算机检索技术及中文数据库使用方法.ppt计算机检索技术及中文数据库使用方法 职工专题培训 主讲 段晓玲 一、计算机信息检索的基本技术: 布尔逻辑算符、截词算符、位置算符、字段限定检索等等。 在进行计算机检索...
  • UXDB支持包括中文在内的多语言全文检索,提供基于自然语言的文本查询能力,内置缺省的分词解析器解析英文,采用zhparser 插件调用 SCWS引擎进行中文分词,实现全文检索,并可按查询相关度排序,支持对短语的搜索和...
  • MySQL-中文全文检索

    2021-01-28 00:59:13
    一、概述MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。二、语法例如:SELECT * FROM tab_name WHERE MATCH ('列名1,列名2...列名n') AGAINST('词1 词2 词3 ....
  • 这不,从MySQL 5.7开始,MySQL内置了ngram全文检索插件,用来支持中文分词,并且对MyISAM和InnoDB引擎有效。在使用中文检索分词插件ngram之前,先得在MySQL配置文件里面设置他的分词大小,比如,[...
  • 因为中文词间并没有明显的区隔,所以中文的分词是按照字典、词库的匹配和词的频度统计,或是基于句法、语法分析的分词,而MySQL并不具备此功能,所以MySQL对中文全文检索的支持几乎为零。目前很多网站和系统都提供了...
  • 如何使用PHP实现全文检索功能?很多人可能马上可以想出几种...但是MYSQL的FULLTEXT字段对中文的支持不是很好,本文也一并介绍如何通过PHP+MYSQL实现中文全文检索功能。首先需要用到一个PHP中文分词扩展模块——SC...
  • 需求:使用postgresql13版本测试中文全文检索功能 安装postgresql13数据库 我这里是使用的docker容器安装测试的 1、创建一个centos7镜像容器 docker run -di --name postgres13 --privileged=true -p 5432:5432 ...
  • 点击上方“Github中文社区”,关注看遍Github好玩的项目来自:腾讯开源背景企业微信作为典型企业服务系统,其众多企业级应用都需要全文检索能力,包括员工通讯录、企业邮箱、审批、汇报、企...
  • 本文实践了zhparser中文插件进行全文检索。准备工作安装插件,最方便的方法是直接使用安装好插件的docker镜像,比如docker pull chenxinaz/zhparser该镜像的postgres数据库版本为10,如果你想要更新的版本,可以自行...
  • 本文使用的MySQL 版本是 5.7.19,InnoDB数据库引擎并配合宝塔linux使用,全文检索适用于小型网站来代替elasticsearch和shirongram全文解析器ngram就是一段文字里面连续的n个字的序列。ngram全文解析器能够对文本...
  • 全文分两部分:一:Lucene简介Lucene版本:3.0.2全文检索大体分两个部分:索引创建(Indexing)和搜索索引(Search)1.索引过程:1)一系列被索引文件(此处所指即数据库数据)2)被索引文件经过语法分析和语言处理形成一...
  • PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索中文分词:i. Robbe完整版本下载:Robbe完整版本(PHP测试程序, 开发帮助文档, WinNT下php各版本的dll文件)下载:http://code.google.com/p/robbe(“谷歌...
  • 但是时候我们要查询的是博客的内容中含有“xxx”,而不是以“xxx”开头,所以应该是下面的SQL语句 select * from blog where content like '%xxx%'; 因此上述SQL语句即便添加了B+树索引也是需要进行索引的扫描来...
  • 浅谈使用ElasticSearch实现全文检索IDEADATA-iDSP-Yeun 2016年5月15日现如今,无论是互联网信息还是企业内部每天产生的信息,都在以指数级增长,对于企业内部,每天发生的大量数据,尤其是非结构化数据中,如何能...
  • 全文检索技术是智能信息管理的关键技术之一,其主要目的就是实现对大容量的非结构化数据的快速查找。DM 实现了全文检索功能,并将其作为 DM 服务器的一个较独立的组件,提供更加准确的全文检索功能,较好地解决了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,005
精华内容 27,202
关键字:

中文全文检索数据库主要有