Compass应用中集成搜索功能


2018-05-07 16:53 讨论     用户总会提出搜刮跟查问范畴实例的需要。大概盼望 构建一个进入应用次序的进口大概盼望 添补表单的机制。非常典范的处理计划是用浏览的方法(把范畴的承继干系体现出来,很多应用次序中。如许用户能够定位跟挑选一个自己需要的大概一个检索表单的方法(展现一个多个输入域的表单,用户能够检索他需要的信息) 对于可用性的角度来说,抱负中。这两种计划都不是最佳的浏览的方法会在有很多分支的时候变得迟缓而笨重。并且,用户平日准确地晓得他要用到那个应用,但是却不甘心要浏览全部体系来找到要的应用。检索表单的方法异样被检索前提个数的多少限定住了这就要在设置充足的检索域还是检索表单的重大性上作出衡量。 处理这个题目的答案就是供给一个单一的Googl样式的检索框,从可用性的角度来说。用户能够输入任何符合实例字段的内容。能够检索跟体现符合这些内容的后果。表单中的这个检索框能够主动添补、Googl发起方法的输入框,大概是前去表花样后果的正则表白式搜刮。不管怎么,这种处理计划的精髓就是UI重大的用户能够输入任何他挑选的前提,而后由搜刮引擎去做这些重大的任务。现在唯一的题目时:怎么实现如许的搜刮性能。 大部分应用次序都挑选了SQL典范的状况是检索的字段都与列名相匹配,劈面对实现传统的多输入域的表单的时候。并且应用SQLLIKE语句。但是,因为重大的SQL要去匹配太多的字段,并且很多 状况下因为这些字段的文本长度题目,构成实现的功能常常黑白常差的第二个题目是对检索后果不排名并且前去的提醒并不反响出与查问的内容有多大相干性,只是重大地前去后果罢了第三,对检索后果相干联的要害字不高亮体现。 大家见解到大部分应用次序需要搜刮引擎。统统实体的字段能够像只要一个文件那样被索引,很快。并且是正则文本搜刮能够匹配的实体。现在非常风行的搜刮引擎之一是LuencLucen相称不错的搜刮引擎,很多 名目中应用胜利。供给了底层的搜刮引擎API能够应用Lucen数据构造(Document/Field去索引数据,能供应用查问API或搜刮引擎在索引上检索。曾经在多种编程语言上实现了所有服从,搜罗JavaC#跟C++等。 一般都有个一个共通的架构跟特色。平日,假如我分析一个典范的Web应用次序。应用与后端的干系数据库一起任务。这个应用应用范畴模型体现这个体系中的实体,并应用ORM框架把范畴模型映射到数据库上。一般状况下,应用一个效劳层框架去管理事件、合作,偶然也搜罗业务逻辑跟Web框架。题目就在于怎么把Lucen集成到如许的应用次序中去。 方才把第一个重大的次序跑起来的时候,当你试图去集成Lucen时候。立刻就会碰到连续串的挑衅。第一个题目就是索引应用数据。之前很长一段工夫,相称多的样板式代码热衷于把范畴模型映射到Lucen数据模型上去。Lucen文档,Lucen主要的数据构造,一个扁平的类似Map只搜罗字符串的数据构造—所以很多偶然义的代码热衷于“植入”跟“植出”范畴模型。别的一个题目是短少对Lucen事件把握 ,把范畴模型数据储备到数据库跟搜刮引擎是有题目的并且另有几个其余很著名的理论跟方法要在Lucen中实现,比如缓存、隐式的搜刮、为支撑Googl样式的搜刮而创立聚拢 的属性跟为适合的语义对峙可辨认的Document东西,等等。 应用了计划很好的搜刮引擎的抽象。Compass扩大了中央Lucen增加了事件把握 服从跟疾速更新,Compass计划目标是简化企业在集成搜刮服从时的花费。CompassLucen之上。也搜罗在数据库储备索引的服从。固然,不去隐蔽Lucen特征—统统Lucen服从都能经过Compass实现。 Compass供给应了重大的并且熟悉的API说Compass供给了让人熟悉的API因为它模仿了以后风行的ORM框架的API来低落进修曲线。Compass以下面一些主要的接口作为主要内容: CompassConfigur用来在一些设置参数、设置文件跟映射定义上设置Compass平日用来创立Compass接口。 创立线程安全的实例来翻开CompassSeesion异样还供给了一些搜刮引擎索引级别的操纵。Compass为单线程应用。 CompassSesss用来实行像保存、删除、查找、装载如许的搜刮操纵。很轻量但是并不是线程安全的 CompassTransact管理Compass事件的接口。应用它并不需要事件管理情况(像SpringJTA 下面是应用这些API一个重大的例子: //次序中设置跟创立Compass CompassConfigurconf= newCompassConfigur.setConnect"/tmp/index".addClassAuthor.class; Compasscompass=conf.buildCompass; //一个恳求操纵 CompassSesssession=compass.openSess; CompassTransacttx=null; tri{ tx=session.beginTransact; ... session.savauthor; CompassHithits=session.find"jacklondon"; A uthora=Authorhits.data0; Resourcr=hits.resourc0; ... tx.commit; }catchCompassExceptce{ iftx!=nulltx.rollback; }final{ session.clos; } Compass供给了好几种挑选,为了简化事件管理代码。第一是应用CompassTempl应用风行的计划方法来抽象事件管理。第二个挑选是跟事件管理情况下,如许,Compass与JTA 与Spring如许的事件管理器集成并在一个曾经存在事件中实行。这个状况下,当一个Session实行的时候,CompassSess可被用做一个主动参加事件处理的代理。这个代理的创立能够是编程式的也可应用SpringIOCSpring2中支撑@CompassContext 与差别的事件管理策略集成,Compass支撑原子性的事件运算。搜罗本地事件管理、JTA 同步、XA forJTA 集成,Spring同步的集成。 基于XMLDTD设置(定义映射跟设置)基于XMLSchema设置。基于XMLSchema设置获得Spring2新的基于Schema设置文件的支撑。Compass设置基于“键—值”逐个对应的设置。Compass能够应用编程式的设置。 Compass主要服从之一就是从应用次序模型到搜刮引擎的申明式映射。Compass搜刮引擎的范畴模型由资本(LucenDocument跟属性(一个LucenField构成。这是用来索引可搜刮内容的抽象数据东西。 第一个映射是RSEMResource/SearchEnginMap这是一个初级别从Compass资本跟属性到搜刮引擎抽象到搜刮引擎的映射。下面是个对作者资本的RSEM示例: 定义了一个映射了作者别号的资本。这个资本的映射搜罗标识资本的ID跟几个附加的属性。定义属性是可选的固然他赞同申明式的把握 差别属性的特色,下面的例子中。搜罗跟一个转换器关系。下面的示例代码添补了一个资本并索引它 Resourcr=session.createResourc"author"; "1"r.addProperti"id". "jack".addProperti"firstName". "london".addProperti"lastName". newDate.addProperti"birthdate".; session.savr; 因为一个资本是可辨认的Compass这个资本曾经存在状况下更新它第二,下面的代码表现了一些Compass特征。第一。能够申明式的安排  一个转换器给这个资本,能够应用Compass内置的很多转换器。下面是下面示例代码的Compass设置(搜罗对mydat转换器的设置) xsi:schemaLocation=" "> 应用注释对它举行了OSEM定义:OSEMObject/SearchEngineMap第二个支撑的映射计划。赞同把应用东西的范畴模型映射到搜刮引擎。下面是Author类。 @Searchable publclassAuthor{ @SearchableId privLongid; @SearchableComponent privStringName; @SearchableReference privListbooks; @SearchablePropertiformat="yyyy-MM-dd" privatDatebirthdate; } //... @Searchable publclassName{ @SearchableProperty privStringfirstName; @SearchableProperty privStringlastName; } Compass就会“植入”进一个资本,OSEM支撑“植入”跟“植出”一个东西的分层构造进入一个资本。当储备一个Author东西。Name类也会“植入”进相反的资本来体现这个作者(因为组件的映射)也搜罗一个这个作者册本列表里的每一本书(储备在其余资本里)援用。这个末了获得资本会储备大概索引在搜刮引擎中。 一个类属性对应多个元数据(从资本到属性的映射)分析器跟统统加入的字段,Compass供给了非常敏捷的机制来把范畴模型映射到搜刮引擎中。下面的例子只是一个很重大的例子。OSEM赞同制订差别的转换器。等等。 下面是author类怎么应用的例子: //... newName"jack",A uthorauthor=newAuthor1."london",newDate; session.savauthor; //... 1;author=Authorsession.loadAuthor.class. Compass支撑的搜刮引擎映射是XSEMXml/SearchEngineMap这种映射赞同基于XML映射的定义(用XPath实现)把XML数据构造直接映射到搜刮引擎。XSEM处理异样的经过对资本“植入”跟“植出”处理。Compass供给了一个XML包装东西叫做XmlObject定义了差别的实现(dom4j,末了。W3CDocument这些实现赞同XPath表白式来求值。假如我给出下面的XML数据构造: Jack London 下面是个XSEM实现: 如许就能够加载跟搜刮数据。Compass支撑多种XMLDOM框架(为XML内容作映射)搜罗JSE5dom4jSA X跟XPP固然定制的实现也很好做。下面是个不错的例子:从XML数据构造到搜刮引擎的映射是应用XPath表白式来实现。XML内容映射能够在搜刮引擎中储备为XML构造。 Readerreader=//constructanxmlreaderoverrawxmlcontent readerA liasedXmlObjectxmlObj=RawA liasedXmlObject"author".; session.savxmlObj; //... 1Resourcresource=session.loadResourc"author".; wecandothefollowaswel//sincwehavexml-content.l 1;XmlObjectxmlObj=session.load"author". 用来把差别的数据源与Compass集成。大部分常用的数据源是Compass与ORM东西的集成。Compass支撑JPA HibernOJBJDO跟iBatiCompassGpCompass一个组件。 Compass给出了两个主要的操纵:索引与镜像。领有这两个映射的东西能够经过应用HibernAPI注册工夫监听,拿Hibern作为例子。举行主动的镜像操纵到搜刮引擎。下面的例子给出了怎么应用CompassGp集成Hibern SessionFactorisessionFactory=//HibernSessionFactory Compasscompass=//setupaCompassinstance CompassGpgps=newSingleCompassGpcompass; sessionFactoriCompassGpsDevicdevice=newHibernate3GpsDevic"hibernate".; gps.addDevicdevic; mirroranichangmadethroughHibernAP//startthegps.I //tobemirrortothesearchengine gps.start; //.... //thiwillcausthedatabastobeindexed gps.index; //thiwillcausHiberntostoretheauthorinthedatabase //andalsoindextheauthorobjectthroughCompass newName"jack",hibernateSess.savnewAuthor1."london",newDate; 但只是掩饰了怎么应用Compass根本服从(特别,这篇文章对Compass主要服从的做了介绍。Compass另有个与Spring集成的扩大组件,这个并没介绍)应用搜刮引擎的时候,Compass异样也有很多 现在风行服从跟有一些微小的差异服从,另有设置扩大服从。Compass主要目标,像方才提到简化集成搜刮辞职何范例的应用次序中,这篇文章只是介绍了怎么应用的根本信息。 Compass唯一集成搜刮服从到各种应用模型中的处理计划。先是专一于及时的C/C++体系,其后转到Java开辟(不再回头)Java世界中,ShaiCompass开源名目标建立者。Shai近来在完因素布式规矩引擎效劳器的任务。这是一个典范的Java为根底的Web名目,面向金融行业、以音讯为根底的名目。现在ShaiGigaSpac体系架构师。 毕业于北京邮电大学应用数学专业,检查英文原文:Compass:IntegratSearchintoyourapp译者简介:周刚。现辞职于BULL现在主要存眷以SpringFramework跟JPA 为骨干的JavaEE跟JavaFX技术,注意对JavaSE根底的常识的传达,尽已所能加入技术社区的内容建立任务,以期共同进步技术程度。加入InfoQ中文站内容建立,请邮件至china-editorial@infoq.com参加InfoQ中文站用户讨论    组,请点击ICUGInfoQChinaUserGroup 封闭 by
上一篇:深度剖析:从能源到交通再到医疗保健,马斯克
下一篇:企业网站建设必读四要点

河北seo公司 石家庄seo公司 唐山seo公司 秦皇岛seo公司 邯郸seo公司 邢台seo公司 保定seo公司 张家口seo公司 承德seo公司 沧州seo公司 廊坊seo公司 衡水seo公司 山西seo公司 太原seo公司 大同seo公司 阳泉seo公司 长治seo公司 晋城seo公司 朔州seo公司 晋中seo公司 运城seo公司 忻州seo公司 临汾seo公司 吕梁seo公司 内蒙古seo公司 呼和浩特seo公司 包头seo公司 乌海seo公司 赤峰seo公司 通辽seo公司 鄂尔多斯seo公司 呼伦贝尔seo公司 巴彦淖尔seo公司 乌兰察布seo公司 兴安seo公司 锡林郭勒seo公司 阿拉善seo公司 辽宁seo公司 沈阳seo公司 大连seo公司 鞍山seo公司 抚顺seo公司 本溪seo公司 丹东seo公司 锦州seo公司 营口seo公司 阜新seo公司 辽阳seo公司 盘锦seo公司 铁岭seo公司 朝阳seo公司 葫芦岛seo公司 吉林seo公司 长春seo公司 四平seo公司 辽源seo公司 通化seo公司 白山seo公司 松原seo公司 白城seo公司 延边seo公司 黑龙江seo公司 哈尔滨seo公司 齐齐哈尔seo公司 鸡西seo公司 鹤岗seo公司 双鸭山seo公司 大庆seo公司 伊春seo公司 佳木斯seo公司 七台河seo公司 牡丹江seo公司 黑河seo公司 绥化seo公司 大兴安岭seo公司 江苏seo公司 南京seo公司 无锡seo公司 徐州seo公司 常州seo公司