`
wwty
  • 浏览: 536896 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

关于搜索开发过程中的总结

阅读更多

1、我想索引文件损坏并不是因为文件没有被关闭,而是在更新索引的时候程序中断的,造成了文件的不完整,才会导致索引文件的损坏的问题--针对IndexWriter没有正常关闭的问题,如果是索引数据写入完毕,最后没有关闭,只会导致索引文件被锁,而不会造成数据的损毁,数据的损毁是在写入的过程中程序突然异常而造成了写入数据的不完整而造成的

 

2、3.0确实取消了2元分词,因为对未知词使用2元切分,在召回率上存在一些问题。新的切分算法配合IKQueryParser是能达到很好的搜索效果的,试试看! --ik3.0版本去掉了针对陌生词的二元分词

 

3、在频繁建索引后,一定记得固定时间要优化索引,比如每天的凌晨1点。--刚开始我写的程序是每写入一次就优化一次的,看来应该将优化放置在晚上进行

 

4、构建实时的索引两种策略,一种是按照每隔一段时间建一次,另一种是判断内存,当内存吃到一定程度了,就写入一次。

 

5、用户搜索*中国*,分词器会怎么处理? 看你用的查询分析器了,如果使用IKQueryParser的话,会帮你过滤掉。但如果使用Lucene自带的parser,就可能被解析为通配符了--有道理

 

6、lucene是按照分词切分的结果进行完整匹配查询的, "硬盘驱动器"被切分成“硬盘”“驱动”“驱动器”,但没有“硬" 和 "盘",(那样是单字切分),因此搜索不到,这个是lucene的基础概念,切记。 

 

7、如果你需要顾虑stopword,需要直接应用IKSegmentor,并加入自己stopfilter,构造一个新的Analyzer。你可以看一看lucene自带的standardAnalyzer的源代码,就知道了--当前记下,以后用到了是个思路

 

8、解释一下,IK3.0为啥不对汉字进行stopword过滤。 

1。IK的核心分词类IKSegmentor的功能是最细化的识别所有的词汇,包括敏感词汇。 

2.对未知的姓名,地面,专有名词,采用单字切分,这样有利于搜索。 

3.对任何的汉字切分结果,IK3.0不做任何“无用词”的假设。如:在佛经中出现的梵文可能被单字切分出大量的拟声词。这些都不能被做为“无用词”过滤。

4.IK推荐用户在各种的专有领域建立自己的停止词库,并建立自己的analyzer实例。 

--关于ik的老大的一些解释,有用

 

9、我觉得你这个需求是为杜撰而杜撰的,首先就与中文的特性违背了。每种语言都有它的切分特性,英文是通过空格分隔,而中文的特性我们采用了词库。这就意味着当“硬盘”是一个词语的时候,“硬”与“硬盘”在词义上是毫无关系的。 

分词器只可能尽可能适应于中文的常规语法切分,而不可能你想怎么分就怎么分。 lucene索引的特性也决定了它的最高效率是“完全索引匹配”,当然你可以使用“前缀匹配”,但这个与lucene的倒排索引设计理念是背道而驰的。--解释的大意同6

 

10、不要强制kill建索引的程序,强制kill很有可能导致索引坏掉,每次关闭前必须保证所有的IndexWriter已经正常的关闭。这点我已经体会到了:我想构建一个可以重用的indexwriter,结果强制kill程序,索引文件被锁了

 

11、如果要做读写分离。同步索引数据要按如下步骤进行:a.停止所有建索引的程序。b.IndexWriter.commit() c.优化所有索引 d。最后再coping or rsyncing。

 

12、每个Document最好都分配一个唯一key,这个key可以是数据库里每个唯一键,也可以是多个字段的组合。用于更新和删除索引--多添加一个field,我选择用数据库当中的唯一键

 

13、把需要更新很频繁的索引和更新不频繁的索引分离成两个目录(要有良好、严密的方案)

 

14、Filter
filter 的作用就是限制只查询索引的某个子集,它的作用有点像SQL语句里的where,但又有区别,它不是正规查询的一部分,只是对数据源进行预处理,然后交给查询语句。注意它执行的是预处理,而不是对查询结果进行过滤,所以使用filter的代价是很大的,它可能会使一次查询耗时提高一百倍。

 

15、关键词区分大小写
or AND TO等关键词是区分大小写的,lucene只认大写的,小写的当做普通单词。

 

16、文件锁
在写索引的过程中强行退出将在tmp目录留下一个lock文件,使以后的写操作无法进行,可以将其手工删除

 

17、时间格式
lucene只支持一种时间格式yyMMddHHmmss,所以你传一个yy-MM-dd HH:mm:ss的时间给lucene它是不会当作时间来处理的

 

18、分词的缺失
比如同义词。用户搜 "北京 饭店" 能不能把" 首都 饭店"也列出来呢? 这个分词器无能为力。所以这个问题,解决办法就只能是在分词之前,我们再加一层:同义词返回模块。这个思路很不错,也比较简单,很容易实现。关键是词库的建立。

 

19、消除歧义
例如:我还清晰地记得我们坐在江边聊天的情境。
分出来是: 我 还清 晰 地 记得 我们 坐在 江边 聊天 的 情境。
结果: 清晰 被拆开了。
这个是基于词库的分词算法固有的问题。没有很好的解决方法。有统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。有一种解决方案是正向匹配结果后再逆向匹配一次,然后比较结果,消除歧义。最好加入词汇概率统计功能.有歧义的用概率决定。

 

20、最大匹配的问题
比如搜索“三季度”这个词,词库里同时有 “三季度” 和 “季度”这两个词,分词时按最大正向匹配 则 “三季度” 被分成一个完整的词,按 “季度” 去检索反而搜不出来了。
解决办法:缩短分词粒度,当字数等于或超过该粒度参数,且能成词,该词就被切分出来。

 

21、新词识别
      新词,也就是那些在字典中都没有收录过,但又确实能称为词的那些词。最典型的是人名,人可以很容易理解句子“王军虎去广州了”中,“王军虎”是个词,因为是一个人的名字,但要是让计算机去识别就困难了。如果把“王军虎”做为一个词收录到字典中去,全世界有那么多名字,而且每时每刻都有新增的人名,收录这些人名本身就是一项巨大的工程。即使这项工作可以完成,还是会存在问题,例如:在句子“王军虎头虎脑的”中,“王军虎”还能不能算词?
     新词中除了人名以外,还有机构名、地名、产品名、商标名、简称、省略语等都是很难处理的问题,而且这些又正好是人们经常使用的词,因此对于搜索引擎来说,分词系统中的新词识别十分重要。目前新词识别准确率已经成为评价一个分词系统好坏的重要标志之一。

 

22、对不同的 field 使用不同的分词器是一个可以考虑的方法。比如 tag 字段,就应该使用一个最简单的分词器,按空格分词就可以了。问题的关键是搜索的时候如何保证创建索引时和查询语句的分词器一致的问题?需要么?--需要考虑

分享到:
评论
2 楼 fusionyu 2013-11-08  
IndexWriter没有正常关闭,导致索引循环能修复不?怎么避免服务器断点导致索引损坏啊?
1 楼 sun19890214 2012-09-04  
mark下,一些能看懂,一些看不懂

相关推荐

    搜索引擎发展进程之个人总结

    搜索引擎发展进程,讲述全球著名搜索引擎的发展过程,对SEOER优化、推广网站是有帮助的哦。当然,对程序员开发网站也是有帮助的,适应搜索引擎的网站才是真正的好网站哦。

    Lucene搜索引擎开发权威经典 光盘

    Lucene搜索引擎开发权威经典 光盘 于天恩 著 中国铁道出版社出版 2008-10 这本书基于Lucene的当前最新版本(2.1)精解了Lucene搜索引擎的相关知识,从基础知识到应用开发,精练简洁,恰到好处。 本书共包括16章,...

    Lucene搜索引擎开发进阶实战_PDF电子书下载

    结合笔者的实际开发经验,总结了一些新的开发技巧和开发思路,并对网上流传的一些错误...本书既可为零起点的Lucene初学者提供系统全面的学习指导,也可帮助有相关经验的开发者解决在开发过程中遇到的一些难题和疑惑。

    基于lucene的搜索引擎总结

    Field:每个Document包含一个或多个不同命名的Field,每个Field对应一段数据,这些数据在搜索过程中可能会被查询或在索引中被检索 全文索引/搜索 Lucene索引代码示例: Directory dir = FSDirectory.getDirectory...

    数据库系统开发个人总结

    二、实习过程  在本次的实践中我负责的是旅游频道、机票常识、特价机票查询这些模块。首先是旅游资料的收集,图片和数据的整理 (一)需求分析 1.信息要求:用户需要从数据库中获得到达目的地所有的机票类型,价格...

    程序开发原理:抽象、规格与面向对象设计.[美]Barbara Liskov(带详细书签).pdf

    该书的后7章主要讲述了怎样利用抽象构建大型软件,主要侧重于软件工程的内容,基于类型层次结构提出对于数据抽象的调试、测试、需求分析、自顶向下和迭代的开发过程,还简要介绍了设计模式的概念。 这是一本传授思想...

    ASP.NET案例学习总结.docx

    有些成功的例子,有400多个总结,十几年开发经验总结,总结了开发过程中常用的技术,并且绝大部分都是成功的案例,复制过来就能直接使用,抹去了试错的时间成本,大大提升了开发效率,省去了去百度搜索的时间成本。...

    解密搜索引擎技术实战-Lucene&java;精华版

    精华版(第3版)》是猎兔搜索开发团队的软件研发和教学实践的经验汇总。《解密搜索引擎技术实战——Lucene&Java;精华版(第3版)》总结搜索引擎相关理论与实际解决方案,并给出了Java实现,其中利用了流行的开源项目...

    SQL优化总结

    个人开发过程中SQL优化经验总结,以及部分网上搜索的资料.

    MyHtml:项目开发过程总结的一些常用效果基于(jquery-1.8.3)

    项目开发过程总结的一些常用效果基于(jquery-1.8.3) 1、ajax远程请求数据,请求时刻菊花狂转,请求成功,数据停止转动,再次请求提示数据存在 2、checkbox全选,反选,全不选 3、table本地搜索 4、基于插件jquery....

    1号店的搜索架构演化实践-周航

    1号店搜索部高级开发经理周航带来《1号店搜索架构演化实践》的主题演讲,分享1号店搜索在架构演化实践过程中总结的经验和教训。

    android开发实例大全_王东华

    实例121: 在手机中开发一个Google搜索 程序 453 实例122: 在手机中编写一个翻译软件 458 实例123: 生成一个二维码 460 实例124: 使用Google Chart API生成二 维码 463 第11章 平板应用 469 实例125: 开发一个...

    百度地图开发java源码-ExceptionSearch:纯前后端分离的搜索引擎项目实战

    为啥本项目取名为搜索引擎呢,在长达一周,超过60个小时的编码过程里,时间主要耗费在搜索这块的业务实现,所以最终把他定为搜索引擎的项目。 两个重点: 搜索这一块我总结了一下两点为重点: 1、在庞大的数据量下,...

    PHP程序开发范例宝典III

    个实例,每个实例都突出实用性,绝大部分实例都体现了PHP编程人员在实际项目开发过程中总结出的经验技巧。  《PHP程序开发范例宝典》内容充实,实例丰富,特别适于PHP编程人员和广大计算机爱好者学习开发使用,也...

    Delphi5开发人员指南

    经典中的经典! 目 录 译者序 序 前言 第一部分 快速开发的基础 第1章 Delphi 5下的Windows编程 1 1.1 Delphi产品家族 1 1.2 Delphi是什么 3 1.2.1 可视化开发环境 3 1.2.2 编译器的速度和已编译代码的效 率 4 ...

    SQL SERVER 2000开发与管理应用实例

    本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,能够多角度地引导读者学习相关...

    购物系统(JavaBean+Servlet+jsp)

    对其中的问题,产生的原因进行了综合分析,对开发过程中的感受、得到的经验进行了总结,得到了很大的进步,发现了一些很实际的问题,同时我感觉到我真正地学到了实际的东西,让我在茫茫之中找到了一些目标,切实感到...

    易买网电商项目网页系统的开发

    在实现过程中,我们采用了现代的前端框架和后端技术,并充分考虑了网站的性能和可扩展性。通过测试和用户反馈,我们验证了网站的有效性和可靠性。最后,本文总结了研究成果,并探讨了未来的研究方向。 本项目的开发...

    微信公众平台应用开发:方法、技巧与案例.(机械工业.柳峰)

    第四部分(第7~11章)首先总结了一些实用的公众平台开发技巧,如使用表情、识别微信浏览器、图文消息使用、公众账号无响应处理、服务多个账号等,然后逐步详细地讲解了“周边搜索”、“猜数字”(游戏)和“聊天...

    微信公众平台应用开发:方法、技巧与案例

    第四部分(第7~11章)首先总结了一些实用的公众平台开发技巧,如使用表情、识别微信浏览器、图文消息使用、公众账号无响应处理、服务多个账号等,然后逐步详细地讲解了“周边搜索”、“猜数字”(游戏)和“聊天...

Global site tag (gtag.js) - Google Analytics