站内全文检索

上传人:feng****ing 文档编号:222902649 上传时间:2023-07-13 格式:DOCX 页数:12 大小:48.12KB
收藏 版权申诉 举报 下载
站内全文检索_第1页
第1页 / 共12页
站内全文检索_第2页
第2页 / 共12页
站内全文检索_第3页
第3页 / 共12页
资源描述:

《站内全文检索》由会员分享,可在线阅读,更多相关《站内全文检索(12页珍藏版)》请在装配图网上搜索。

1、站内全文检索Like模糊程度太低无法匹配几个关键词不在一起的造成全表扫描效率低下数据库全文检索:比较快的全文本检索规范要选作是开启全文检索字段会对搜索字段进 行一定的分词处理但是只能是比较常用的分词方法数据表字段加索引Lucene.Net全文检索开发包文档性的 可以指定分词工具和词库 搜数据从lucene中查找 更新数据库就要更新lucene1只能搜索文本2要把数据写到lucene中 然后通过lucene搜索3 lucene首先把文章进行分词挑选出关键词进行存储和加索引文章分词算法? ?搜索引擎内部保存的就是一个个的词一元分词:英文的比较好用。StandardAnalyzer二元分词:每两个字

2、算一个词。CJKAnalyzerXx cc bb l中国天气 基于词库的分词算法:基于一个词库进行分词可以提高分词的成功率和可读性。词库里面有的则可以分出来,没有的分不出来。比如庖丁解牛,盘古分词。效率比较低。词 库根据需要还需要更新。一个优秀的分词算法很重要。网上择优选择一个最好的分词算法。分词算法的演示:一元分词: 3.0.3自身测试是一元分词Pangu 分词不支持 3.0.3L 版本 2.922Pangu版本2.3.0具体解决方案在demo内测试数据无 最多测试2千数据 其他解决方案:1 elasticsearch2 solr EasyNet.soIr3 sphinx php常用(看样子

3、是不太好 局限性太强了 N年不更新)4 mysql全文检索方案可以配合3使用二: mysql使用方法三:mysql全文检索方法分词算法介绍:现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。文本挖掘分词作用语义识别基于字符串 正向最大匹配法逆向最大匹配法最小切分双向最大匹配法综合分词特征/标志切分-断点切分中文分词详解:分词算法机器人拟人/语法语义判断:分词系统句法系统总控部分基于统计1,词的出现频率2,文本统计/文本词库新词识别歹分词难题歧义识别1基于词典的方法(字符串匹配,机械分词方法)定义:按照一定策略将待分析的汉字串和一个“大机器词典”中的词

4、条进行匹配,或是在词 典中找到某个字符串,则匹配成功。1.1正向最大匹配思想:MM1从左到右取待切分的语句的m个字段作为匹配字段,m为大机器词典中最长词条个 数。2查找大机器词典并进行匹配,若匹配成功,则将这个匹配字段作为一个词切分出来。 若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段 在此匹配,重复上过程,直到切分出所有的词。1.2逆向最大匹配算法RMM该算法是正向最大匹配的逆向思维,匹配不成功,将匹配字段最前面的一个字去掉,实 验表明逆向算法要优于正向算法。1.3双向最大匹配法(BM)该算法是在正向最大匹配和逆向最大匹配中的结果进行比较从而决定正确的分词方 法

5、。1.4设立切分标志法收集切分标志,在自动分词前处理切分标志,再用M, RMM等进行细加工。 2基于统计的分词(无字典分词)主要思想:上下文中,相邻的字同时出现的次数越多,就越可能构成一个词。N元文法模型(N-gram)隐马尔科夫模型(HMM)分词工具(C#下能用的):1: IKAnalyzer正向迭代最细粒度切分法2: CJKAnalyzer正向迭代二元切分不需要词典不根据语义EXP:我们的祖国一我们|们的|的祖|祖国检索出现找不到的情况蛮多 3: pangu 分词采用地点和统计结合的分词算法。4: paoding5: LibMMseg是C为sphinx全文搜索引擎设计的中文分词软件包。6:

6、 imdict-chinese-analyzer是imdict智能词典的智能中文分词模块。基于HMM模型。是ictclas 的重新实现。7: mmseg4j利用MMSEG算法实现的中文分词器并实现lucene和solr。 采用两种非此方法,都是基于正向最大匹配。8:结巴分词9: ICTCLAS 中科院分词工具基于算法的分词是不必要维护词库的,但是词库法则必须维护词库,短语在不断的发展。实 际上现在许多著名的搜索引擎都采用了多种分词方法,并且有基于统计学的新词识别,自动 维护词库等功能。检索引擎:solr 或者 Elasticsearch 服务 spnixCoreseekMYSQL 全文检索实例

7、L+pangu分词实现的全文检索 分词可以换成CJKkAnalyzer或者IKAnalyzer 我查的资料是现在mysql的全文索引对中文还是不支持的,如果想要实现可以采用将内容转换为拼音存储,然后关键字转换为拼音检索,或者将内容进行分词,把分词后的保存一份, 将检索条件分词,在分词后的内容中查找。用第三方实现:Demo: MYSQL57+EF6 出现的MySQL - Entity: The value for column Is Primary Key in table ,TableDetails, is DBNullBUG的解决方案:l Entity Framework (version

8、6.1 3) and MySQL Server (5 7IE One way tc- neso ve the issue is.global optimizer_switch-b derived_nerge-Orr - ;|1 5crv:i匚(services 匚)and restart Hy5QL57 service 2. Ems匚utE the fallowing comroandE in lySQL.3 r Upd at e thu , cdPx.Sravanan Sw匚hi3Z4 * 3 *12Its a late reply. But. hope it will help someb

9、ody.Thanksanswered Feb 16 al 2:2?兮harp irrifir&vGi this: anverFixed my issue! Thanhs 一 Kyle E4K Feb 1E at 8:S8This fbced the errar I was recenng. I undated ;any new tables I wanted to edd and now the tables onginislly there are erronngr Entrty type 1h_naW is na1 mapped any suggestions? - Kyle E4K Rh

10、 JH it OilThanks! Worked 1dr me :) - Mehmet Taha Meral Feb 17 iat :工!3KyleE4K. sorry I neerfsieed such issue. When I update the .edoiixfile. the hew tables and nnodilied laoles get updaled properly Sarnan Sachi Feb 17 s1 1 22 Hello-this fixed my isaueBut it wuild be nice if you could also explain ya

11、ur answer f&r why this worked.- Abhishek Mar 14 at 11:24show 2 mere comments如果上面方法不好使:This is a know bug: http:4 Run the command on mysql console:set global aptim zer_switch =derivd_mcrge=orf1ORset opti mizB r witchdenved_me rge=OFF(this one worked far m&Verik tnat the change is effective with this

12、command:SE. ECT dptimizer_svtc hGhttpscJ/dev. mysql.c o m. doc. nefm an/5. Z/en.switch a bl e-opti mizati o s. htrr I这个BUG到5.7.11依旧没修复。Mysql建立好数据库之后,引用了 mysql.data和mysql.data.entity两个bll文件。构建Mysql 的实体框架。获得model,在此过程中出现上述错误。按照上述解决方案修改。MYSQL全文检索解决方案:大数据量的全文检索一般都会用到MySQL的FULLTEXT全文索引,通过SELECT.MATCH. AG

13、AINST语句来进行查找。迄今为止,MySQL对中文全文索引无法正确支持,MySQL是不会识别中文词语的。参照MyS QL识别英文单词机制,要建立中文全文索引,暂时的解决方案只有手动将中文分词(以空格的 形式将中文词语分开),来将中文转换成MySQL认识的语言。如今网上对于中文分词的解决方案有很多,有基于MySQL插件的,有谈论算法思想的。基于插 件(如海量科技的 MySQL-LinuxX86-Chinese+,hightman 开发的 mysql-ft-hightman 的方式主要通过对MySQL数据库安装一个别人提供好的插件,在建FULLTEXT索引的字段时 后面加上WITH PARSER

14、 XXX(大多都是这样)的形式。而基于算法思想的则大部分工作都 要自己完成,但他们的大体思想都差不多:1. 对插入的要建全文索引的中文数据进行分词;2. 将原始数据和分词后的数据都存入数据库中,并以某种方式建立联系;3. 在存储分词数据的字段上建立FULLTEXT索引;4. 查询时以SELECT.MATCH.AGAINST的方式在分词字段上搜索,将搜到的行通过前面建立 的联系找到原始数据行并返回。还可以在将分词之后的词组拿过来通过一定的编码方式 比如比如base64编码、urlencode编码 等,汉字转拼音等将转好的存到数据库内,搜索条件进行同样的处理之后和数据库中已存的进 行比较。MySQ

15、L中文全文检索一、概述MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索 引来提高匹配的速度。二、语法MATCH (col1,col2,)AGAINST (expr search_modifier) search_modifier: IN BOOLEAN MODE | WITH QUERY EXPANSION 例如:SELECT * FROM tab_name WHERE MATCH (列名 1,列名 2.列名 n) AGAINST(词 1 词 2 词 3 .词 m);即: MATCH相当于要匹配的列,而AGAINST就是要找的内容。这里的table需要是MyI

16、SAM类型的表,col1、col2必须是char、varchar或text类型,在查询之前需要在col1和col2上分别建立全文索引(FULLTEXT索引)。三、检索方式1、自然语言检索:IN NATURAL LANGUAGE MODE2、布尔检索:IN BOOLEAN MODE剔除一半匹配行以上都有的词,譬如说,每个行都有this这个字的话,那用this去查 时,会找不到任何结果,这在记录条数特别多时很有用,原因是数据库认为把所有行都找出来是没有意义的,这时,this几乎被当作是stopwo rd(中断词);但是若只有两行记录时,是啥鬼也查不出来的,因为每个字都出现50% (或以上),要避免

17、这种状况,请用IN BOOLEAN MODE。 IN BOOLEAN MODE 的特色:不剔除50%以上符合的row。不自动以相关性反向排序。可以对没有FULLTEXT index的字段进行搜寻,但会非常慢。限制最长与最短的字符串。套用 Stopwords。搜索语法规则:+ 一定要有(不含有该关键词的数据条均被忽略)。-不可以有(排除指定关键词,含有该关键词的均被忽略)。 提高该条匹配数据的权重值。banana orange)IN BOOLEAN MODE);返回必须同时包含“apple banana”或者必须同时包含“apple orange的记录。若同时包含“apple banana”和“

18、apple orange的记录,贝则apple banana”的权重高 于“apple orange的权重。3、查询扩展检索: WITH QUERY EXPANSION四、MySQL全文检索的条件限制1、在MySQL5.6以下,只有MyISAM表支持全文检索。在MySQL5.6以上Innodb引 擎表也提供支持全文检索。2、相应字段建立FULLTEXT索引五、与全文检索相关的系统变量:ft_min_word_len =全文检索的最小许可字符(默认4,通过SHOW VARIABLES LIK E ft_min_word_len可查看),中文通常是两个字就是一个词,所以做中文的话需要修改这个值为2

19、最好。六、总结事项1、预设搜寻是不分大小写,若要分大小写,columne的character set要从utf8改成u tf8_bi n。2、预设MATCH.AGAINST是以相关性排序,由高到低。3、MATCH(title, content)里的字段必须和 FULLTEXT(title, content)里的字段一模一 样。如果只要单查title或content 个字段,那得另外再建一个FULLTEXT(title)或F ULLTEXT(content),也因为如此,MATCH()的字段一定不能跨table,但是另外两种搜寻方 式好像可以。4、MySQL不支持中文全文索引,原因很简单:与英文

20、不同,中文的文字是连着一起写的, 中间没有MySQL能找到分词的地方,截至目前MySQL5.6版本是如此,但是有变通的办法, 就是将整句的中文分词,并按urlencode、区位码、base64、拼音等进行编码使之以字母+ 数字”的方式存储于数据库中。步骤1配置my.ini,在my.ini末尾添加如下:#修改全文检索的最小许可字符为2个字符或汉字ft_m in_ word_le n = 2第二方检索解决方案原理:索引文件单独保存的一个文件结果查询客户端L :今天阴天今天 阴天重点类的说明Analyzer类:LuceneNet中分词算法的基类 任何自定义算法都需继承它FSDirectory类:指定

21、索引库文件存放文件位置 是Directory的子类(它有两个子类 还有一 个RAMDirecory,它用来指定将索引库文件存放在内存中)IndexReader:对索引进行读取的类静态方法 bool IndexExists(Directory directory)-判断目录 directory 是否是一个索引目 录IndexWriter:对索引进行写的类静态方法 bool IsLocked(Directory directory)-判断目录是否锁定它在对索引目录写之前会把目录锁定,两个IndexWrite无法同时操作一个索引文件In dexWrite在进行写操作的时候会自动加锁Close自动解锁

22、Un lock手动解锁(通常用在程序异常退出In dexWrite还没来得及close)Document类:要检索的文档相当于一条记录Add(Field field)向文档中添加字段Filed类:构造函数(字段名,字段值,是否存储原文,是否对该字段创建索引,存储索引词间距)是否存储原文:Field.Store.YES存储原值(如显示原内容必须为YES) Field.Store.NO不 存储原值Field.Store.YES压缩存储是否创建索引:Field.Index.NOT_ANALYZED不创建索引 Field.Index.ANALYZED 创建 索引(利于检索)IndexSearcher:

23、搜索类 Searcher 类的子类Search(查询条件Query,过滤条件Filter,检索见过存放容器Collector)Query类:所有查询条件父类(子类都具有Add方法)子类PhraseQuery:多个关键词的拼接类 关键词间是且的关系query.Add(new Term(字段名,关键词)query.Add(new Term(字段名 2,关键词 2)类似于:where字段名contains关键词and字段名2 contains关键词21、创建 Field创建Field最常用的构造函数(太多重载不一一叙述)如下:Fieldstring name, string value, Store

24、 store, Index index)参数说明: name:Field 名称; value:Field 值; Store :存储方式; In dex:索引方式;Store枚举Store是一个枚举,在3.0.3版本只有两个取值了,表示是否将值存储到L里: Yes存储; No不存储;Index枚举Index是一个枚举,在3.0.3版本有以下取值, NO :不索引(数据库主键) ANALYZED :索引经过分词器处理的字段值(正文,摘要,标题) NOT_ANALYZED :不使用分词器索引字段值(meta keyword) NOT_ANALYZED_NO_NORMS:不分析也不索引(姓名,日期等不

25、需要模糊搜索的字 段) ANALYZED_NO_NORMS :不使用分词器索引字段,也禁用索引调节因子以一篇文章为例,通常我们会按照标题和全文进行模糊搜索,这类需要进行模糊搜索的字段 就用Field.Index.ANALYZED,通常会按照作者名称进行精确搜索,需要精确搜索的字段就用 NOT_ANALYZED_NO_NORMS。而至于Store,比较小的内容可以直接存储,如作者,文档摘要等。而文章主体内容就没必 要存储了。2、创建 Document创建Document的方法如下:Documentdoc = newDocument();这个方法用来创建一个不含任何Field的空Document。

26、如果想把Field添加到Document里面,只需要使用add方法:doc.Add(field);3、创建 IndexWriter创建IndexWriter的方法很多,下面给出最常用的方法:using (IndexWriter writer = new IndexWriter(Directory, Analyzer, MaxFieldLength)参数解释: Luce ne.Net.Store.Directory :存储索引路径的实例; Luce ne.Net.A nalysis.A nalyzer :分析器的实例; Luce ne.Net.I ndex.I ndexWriter.MaxFie

27、ldLe ngth :可被拆分出最大的词条数量。分析器是用来做词法分析的,包括英文分析器和中文分析器等。要根据所要建立索引的文件 情况选择恰当的分析器。常用的有: Sta ndardA nalyzer:标准分析器; CJKA nalyzer:二分法分词器; ChineseAnalyzer:中文分析器; Fre nchA nalyzer:法语分析器;可惜L只有StandardAnalyzer分词器,要实现其他分词要配合上其他第三方 分词器使用。通过建立IndexWriter,就把逻辑索引和物理索引联系起来了,这样就可以很方便地建立索 引。使用二分法分词器来分析字段内容,然后将索引建立在Directory实例的路径中。要把Document添加到索引中来,需要使用addDocument方法。wri ter.AddDocumen t( doc);Solr:搜索引擎的使用:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!