首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    不选择使用Lucene的6大原因

    Lucene是开放源代码的全文搜索引擎工具包,凭借着其强劲的搜索功能和简单易用的实现,在国内已经很普及,甚至一度出现了言搜索必称Lucene的盛景。上个月Lucene的开发团队发布了 Java Lucene 2.3.1 ,相信很多朋友们都用上了。在国内对Lucene的介绍可以分为3块儿: 第一类是:以车东 的Lucene:基于Java的全文检索引擎简介 为代表的基础入门介绍; 第二类是Lucene倒排索引原理和Lucene软件包、实现类的介绍; 第三类是以中文分词为中心的介绍;      任何一个软件,包括所有伟大的软件都有这样或者那样的“缺点”和各自适用的领域,Lucene也不例外。在国内对Lucene这个软件包的批评,似乎没有看到过。可能大家都忙于做项目,纵然Lucene有再大的缺陷,凭借着Lucene良好的口碑,也不会说上一句不是。      今天在阅读LingWay (一个做垂直的语义搜索引擎)的CTO Cedric Champeau 先生的博客是发现有一篇题为:Why lucene isn't that good 为什么Lucene并不是想象的那么棒 的文章:Champeau 开门见山指出了Lucene的6大不足之处,鉴于 Lingway 公司使用Lucene已有好几年的历史,我相信Cedric Champeau的对Lucene的评论还是值得一读。 不选择使用Lucene的6大原因: 6、Lucene 的内建不支持群集。         Lucene是作为嵌入式的工具包的形式出现的,在核心代码上没有提供对群集的支持。实现对Lucene的群集有三种方式:1、继承实现一个 Directory;2、使用Solr 3、使用 Nutch+Hadoop;使用Solr你不得不用他的Index Server ,而使用Nutch你又不得不集成抓取的模块; 5、区间范围搜索速度非常缓慢;        Lucene的区间范围搜索,不是一开始就提供的是后来才加上的。对于在单个文档中term出现比较多的情况,搜索速度会变得很慢。因此作者称Lucene是一个高效的全文搜索引擎,其高效仅限于提供基本布尔查询 boolean queries; 4、排序算法的实现不是可插拔的,因为贯穿Lucene的排序算法的tf/idf 的实现,尽管term是可以设置boost或者扩展Lucene的Query类,但是对于复杂的排序算法定制还是有很大的局限性; 3、Lucene的结构设计不好;     Lucene的OO设计的非常糟,尽管有包package和类class,但是Lucene的设计基本上没有设计模式的身影。这是不是c或者c++程序员写java程序的通病?     A、Lucene中没有使用接口Interface,比如Query 类( BooleanQuery, SpanQuery, TermQuery...) 大都是从超类中继承下来的;     B、Lucene的迭代实现不自然: 没有hasNext() 方法, next() 返回一个布尔值 boolean然后刷新对象的上下文; 2、封闭设计的API使得扩展Lucene变得很困难;    参考第3点; 1、Lucene的搜索算法不适用于网格计算; 详情可以查看:Cedric Champeau 先生的博客:Why lucene isn't that good 为什么Lucene并不是想象的那么棒

    02

    java基础学习_面向对象(下)01_day08总结

    ============================================================================= ============================================================================= 涉及到的知识点有: 1:继承(掌握)   (0)Java继承概述   (1)继承定义   (2)Java中如何表示继承呢?格式是什么呢?   (3)继承的好处   (4)继承的弊端     A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。     B:打破了封装性。   (5)Java中继承的特点   (6)继承的注意事项     A:Java中类只支持单继承,不支持多继承。     B:Java中可以多层(重)继承(继承体系) (7)那么什么时候使用继承呢?     A:继承体现的是:is a的关系。     B:采用假设法。 (8)Java继承中的成员关系     A:成员变量     B:构造方法     C:成员方法 (9)方法重写:(方法=成员方法)   (10)方法重写的两个面试题     A:Override和Overload的区别?Overload是否可以改变返回值类型?     B:this和super的区别和各自的作用? (11)数据初始化的面试题     A:一个类的初始化过程     B:子父类的构造执行过程     C:子父类的初始化(分层初始化) (12)继承案例     A:学生和老师案例     B:猫狗案例的分析和实现 ============================================================================= ============================================================================= 1:继承(掌握) (0)Java继承概述 (1)继承定义:把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容。这个关系叫继承。 (2)Java中如何表示继承呢?格式是什么呢? A:用关键字extends表示。 B:格式:       class 子类名 extends 父类名 {} --------------------------------------- (3)继承的好处: A:提高了代码的复用性。 B:提高了代码的维护性。 C:让类与类之间产生了一个关系,是多态的前提。       类与类产生了关系,其实也是继承的一个弊端:         类的耦合性增强了。 --------------------------------------- (4)继承的弊端: A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。       开发设计的原则:低耦合,高内聚。         耦合:类与类之间的关系。         内聚:自己完成某件事情的能力。 B:打破了封装性。       因为我们曾经说过:一个类中的成员尽量不要让外界直接访问,子类继承父类后,那么父类的封装就被打破了。 --------------------------------------- (5)Java中继承的特点: A:Java中类只支持单继承,不支持多继承。       即:一个类只能有一个父类,不可以有多个父类。       class Father {}       class Mother {}       class Son exnteds Father {}   //正确的       class Son extends Father,Mother {}   //错误的       有些语言是支持多继承的额,比如c++。其格式是:extends 类1,类2,... B:Java中可以多层(重)继承(继承体系)       class A {}       class B extends A {}       class C extends B {} --------------------------------------- (6)继承的注意事项:     A:子类不能继承父类的私有成员(成员变量和成员方法)。       其实这也体现了继承的另一个弊端:打破了封装性。       因为我们曾经说过:一个类中的成员尽量不要让外界直接

    02
    领券