关闭

关闭

封号提示

内容

首页 SOLR搭建企业搜索平台以及中文分词.doc

SOLR搭建企业搜索平台以及中文分词.doc

SOLR搭建企业搜索平台以及中文分词.doc

上传者: roger_yb 2012-07-16 评分 5 0 118 16 536 暂无简介 简介 举报

简介:本文档为《SOLR搭建企业搜索平台以及中文分词doc》,可适用于IT/计算机领域,主题内容包含SOLR搭建企业搜索平台、SOLR搭建企业搜索平台运行环境:运行容器:TomcatSolr版本:apachesolr分词器:mmsegj词库:sog符等。

SOLR搭建企业搜索平台、SOLR搭建企业搜索平台运行环境:运行容器:TomcatSolr版本:apachesolr分词器:mmsegj词库:sogoudic准备工作:下载tomcat:http:tomcatapacheorgdownloadcgi下载solr:http:apacheetoakcomlucenesolr详情请见:http:wikiapacheorgsolrSolr下载分词器:http:codegooglecompmmsegj下载sougou词库:http:codegooglecompmmsegjdownloadsdetailname=sogoudiczipcan=q=开始配置:、安装tomcat、将下载的solr包下面的dist文件夹中的apachesolrwar拷贝到tomcat的webapps并且改名为solrwar一般情况下会自动生成相应的文件夹。、新建一个solrtomcat文件夹我是把这个文件夹建立在C盘根目录你可以采用同样方式也可以不这样放哪由你决定。建立好该文件夹以后,在把它下面在建立一个solr文件夹把下载的solr包里面的examplesolr文件夹下面的所有文件放入到solr里面。、最后一步配置solrhome可以有三种方式。)基于当前路径的方式     这种情况需要在c:solrtomcat目录下去启动tomcatSolr查找solr因此在启动时候需要切换到c:solrtomcat  )基于环境变量     windows在环境变量中建立solrhome,值为c:solrtomcat     linux在当前用户的环境变量中(bashprofile)或在catalinash中添加如下环境变量exportJAVAOPTS="$JAVAOPTSDsolrsolrhome=optsolrtomcatsolr"   )基于JNDI      在tomcat的conf文件夹建立Catalina文件夹然后在Catalina文件夹中在建立localhost文件夹在该文件夹下面建立solrxml其中内容:<Context docBase="C:ProgramFilesApacheSoftwareFoundationTomcatwebappssolr" debug="" crossContext="true" >        <Environment name="solrhome" type="javalangString" value="c:solrtomcatsolr" override="true" >  <Context> 、打开浏览器输入:http:localhost:solradmin (其中的端口根据情况输入默认是)就可以访问solr服务了、如果出现如下图示表示配置成功。、SOLR搭建企业搜索平台中文分词这篇文章主要说的是怎么在solr中加入中文分词、下载分词器:http:codegooglecompmmsegj、将解压后的mmsegj目录下的mmsegjalljar拷贝到TomcatHOMEwebappssolrWEBINFlib目录下。、添加词库:在C:solrtomcatsolr目录下新建dic文件夹将解压后的sogoudicdata目录下的wordsdic拷贝到C:solrtomcatsolrdic目录下。、更改schemaxml(c:solrtomcatsolrconf)文件使分词器起到作用。更改内容为:<types>……<!mmsegjfieldtypes><fieldTypename="textComplex"class="solrTextField"positionIncrementGap=""><analyzer><tokenizerclass="comchenlbmmsegjsolrMMSegTokenizerFactory"mode="complex"dicPath="C:solrtomcatsolrdata"><filterclass="solrLowerCaseFilterFactory"><analyzer><fieldType><fieldTypename="textMaxWord"class="solrTextField"positionIncrementGap=""><analyzer><tokenizerclass="comchenlbmmsegjsolrMMSegTokenizerFactory"mode="maxword"dicPath="C:solrtomcatsolrdata"><filterclass="solrLowerCaseFilterFactory"><analyzer><fieldType><fieldTypename="textSimple"class="solrTextField"positionIncrementGap=""><analyzer><tokenizerclass="comchenlbmmsegjsolrMMSegTokenizerFactory"mode="simple"dicPath="C:solrtomcatsolrdata"><filterclass="solrLowerCaseFilterFactory"><analyzer><fieldType>……<types>注:dicPath="C:solrtomcatsolrdic"是你的词库路径我的是放在了C:solrtomcatsolrdic目录下。<fields>……<fieldname="simple"type="textSimple"indexed="true"stored="true"multiValued="true"><fieldname="complex"type="textComplex"indexed="true"stored="true"multiValued="true"><fieldname="text"type="textMaxWord"indexed="true"stored="true"multiValued="true">……<fields><copyFieldsource="simple"dest="text"><copyFieldsource="complex"dest="text">重启你的tomcat。访问:http:localhost:solradminanalysisjsp可以看mmsegj的分词效果。在Field的下拉菜单选择name然后在应用输入complex。分词的结果如下图:好了可以运行起来了那就添加个文档试下在解压后的apachesolrexampleexampledocs目录下创建mmsegjsolrdemodocxml文档内容如下:<add><doc><fieldname="id"><field><fieldname="text">昨日,记者从解放军总参谋部相关部门获悉,截至月日,解放军和武警部队累计出动万人次官兵支援地方抗旱救灾。组织民兵预备役人员万人次支援地方抗旱救灾。<field><doc><doc><fieldname="id"><field><fieldname="text">下半年房价调整就是挤水分房价回不到去年水平。<field><doc><doc><fieldname="id"><field><fieldname="text">solr是基于LuceneJava搜索库的企业级全文搜索引擎目前是apache的一个项目。<field><doc><doc><fieldname="id"><field><fieldname="text">中国人民银行是中华人民共和国的中央银行。<field><doc><add>然后在cmd下运行postjar如下:F:lucenesolrapachesolrexampleexampledocs>javaDurl=http:localhost:solrupdateDcommit=yesjarpostjarmmsegjsolrdemodocxml查看是否有数据访问:http:localhost:solradmin在QueryString:中输入“中国”显示如下图所示:到这里分词成功。至于schemaxml中的配置属性会在下一章中进行详细的介绍。Solr分词顺序Solr建立索引和对关键词进行查询都得对字串进行分词在向索引库中添加全文检索类型的索引的时候Solr会首先用空格进行分词然后把分词结果依次使用指定的过滤器进行过滤最后剩下的结果才会加入到索引库中以备查询。分词的顺序如下:索引:空格whitespaceTokenize:过滤词(停用词如:on、of、a、an等)StopFilter:拆字WordDelimiterFilter:小写过滤LowerCaseFilter:英文相近词EnglishPorterFilter:去除重复词RemoveDuplicatesTokenFilter查询:查询相近词:过滤词:拆字:小写过滤:英文相近词:去除重复词以上是针对英文中文的除了空格其他都类似。、SOLR搭建企业搜索平台配置文件详解在solr里面主要的就是solr的主目录下面的schemaxml,solrConfigxml。首先:schemaxmlschemaxml这个相当于数据表配置文件它定义了加入索引的数据的数据类型的。主要包括types、fields和其他的一些缺省设置。、首先需要在types结点内定义一个FieldType子结点包括name,class,positionIncrementGap等等一些参数name就是这个FieldType的名称class指向orgapachesolranalysis包里面对应的class名称用来定义这个类型的行为。在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤。例如:<fieldTypename="text"class="solrTextField"positionIncrementGap=""><analyzertype="index"><tokenizerclass="solrWhitespaceTokenizerFactory"><!inthisexample,wewillonlyusesynonymsatquerytime<filterclass="solrSynonymFilterFactory"synonyms="indexsynonymstxt"ignoreCase="true"expand="false">><!CaseinsensitivestopwordremovalenablePositionIncrements=trueensuresthata'gap'islefttoallowforaccuratephrasequeries><filterclass="solrStopFilterFactory"ignoreCase="true"words="stopwordstxt"enablePositionIncrements="true"><filterclass="solrWordDelimiterFilterFactory"generateWordParts=""generateNumberParts=""catenateWords=""catenateNumbers=""catenateAll=""splitOnCaseChange=""><filterclass="solrLowerCaseFilterFactory"><filterclass="solrEnglishPorterFilterFactory"protected="protwordstxt"><filterclass="solrRemoveDuplicatesTokenFilterFactory"><analyzer>……<fieldType>在index的analyzer中使用solrWhitespaceTokenizerFactory这个分词包就是空格分词然后使用solrStopFilterFactorysolrWordDelimiterFilterFactorysolrLowerCaseFilterFactorysolrEnglishPorterFilterFactorysolrRemoveDuplicatesTokenFilterFactory这几个过滤器。在向索引库中添加text类型的索引的时候Solr会首先用空格进行分词然后把分词结果依次使用指定的过滤器进行过滤最后剩下的结果才会加入到索引库中以备查询。Solr的analysis包并没有带支持中文的包在第二篇文章中详细讲了怎样添加mmsegj中文分词器详情请参见http:dzqjavaeyecomblog、接下来的工作就是在fields结点内定义具体的字段(类似数据库中的字段)就是filedfiled定义包括name,type(为之前定义过的各种FieldType),indexed(是否被索引),stored(是否被储存)multiValued(是否有多个值)等等。例:<fields><fieldname="id"type="integer"indexed="true"stored="true"required="true"><fieldname="name"type="text"indexed="true"stored="true"><fieldname="summary"type="text"indexed="true"stored="true"><fieldname="author"type="string"indexed="true"stored="true"><fieldname="date"type="date"indexed="false"stored="true"><fieldname="content"type="text"indexed="true"stored="false"><fieldname="keywords"type="keywordtext"indexed="true"stored="false"multiValued="true"><fieldname="all"type="text"indexed="true"stored="false"multiValued="true"><fields>field的定义相当重要有几个技巧需注意一下对可能存在多值得字段尽量设置multiValued属性为true避免建索引是抛出错误如果不需要存储相应字段值尽量将stored属性设为false。、建议建立了一个拷贝字段将所有的全文字段复制到一个字段中以便进行统一的检索:<fieldname="all"type="text"indexed="true"stored="false"multiValued="true">并在拷贝字段结点处完成拷贝设置:<copyFieldsource="name"dest="all"><copyFieldsource="summary"dest="all">注:“拷贝字段”就是查询的时候不用再输入:userName:张三anduserProfile:张三的个人简介。直接可以输入"张三"就可以将“名字”含“张三”或者“简介”中含“张三”的又或者“名字”和“简介”都含有“张三”的查询出来。他将需要查询的内容放在了一个字段中并且默认查询该字段设为该字段就行了。、除此之外还可以定义动态字段所谓动态字段就是不用指定具体的名称只要定义字段名称的规则例如定义一个dynamicFieldname为*i定义它的type为text那么在使用这个字段的时候任何以i结尾的字段都被认为是符合这个定义的例如:nameigenderischooli等。schemaxml配置文件大体上就是这样更多细节请参见solrwikihttp:wikiapacheorgsolrSchemaXml。如果有什么问题请与我联系我会和你共同探讨。、SOLR搭建企业搜索平台MultiCoreSolrMulticore是solr的新特性。其目的一个solr实例可以有多个搜索应用。我们知道你既可以把不同类型的数据放到同一index中也可以使用分开的多indexes。基于这一点你只需知道如何使用多indexes(实际上就是运行Solr的多实例)。尽管如此为每一个类型添加一个完整的Solr实例会显得太臃肿庞大。Solr引入了Solrcore的概念该方案使用一个Solr实例管理多个indexes这样就有热点core(hotcore)的重读(reloading)与交换(swap通常是读index与写index交换)那么管理一个core或index也容易些。每个Solrcore由它自己的配置文件和索引数据组成。在多core执行搜索和索引几乎和没有使用core一样。你只是添加core的名字为各自不同的URL。单core情况下的如下搜索:http:localhost:solrselectq=davematthews在多core环境下你可以通过如下方式访问一个名为mbartists的core:http:localhost:solrcoreselectq=davematthews并非在URL中引入corename的参数名值对而是用不同的context。这样就可以像在单core中执行你的管理任务搜索更新操作。、找到solr下载包中的example文件夹在它的下面有个multicore文件夹将这个文件夹下面的core、core和solrxml拷贝到c:solrtomcatsolr下面。注意:有一个solrxml(这只是默认文件当然也可以指定别的文件)如:<xmlversion=""encoding=""><solrpersistent="false"><coresadminPath="admincores"><corename="core"instanceDir="core"><corename="core"instanceDir="core"><cores><solr>这个文件是告诉solr应该加载哪些core<cores>……<cores>里有core、core。core(可以类比以前的solrhome)conf目录下有schemaxml与solrconfigxml可以把实际应用的复制过来。、启动tomcat访问应用就可以看到有Admincore和Admincore、采用上面的默认solrxml索引文件将存放在同一个目录下面在这里将存放在C:solrtomcatsolrdata如果你想更改目录或者两个应用存放在不同的目录请参见下面的xml。<corename="core"instanceDir="core"><propertyname="dataDir"value="datacore"><core>一些关键的配置值是:Persistent="false"指明运行时的任何修改我们不做保存。如拷贝。如果你想保存从启动起的一些改动那就把persistent设置为true。如果你的index策略是完成建index到一个纯净的core中然后交换到活动core那么你绝对应该设为true。sharedLib="lib"指明了所有core的jar文件的lib目录。如果你有一个core有自己需要的jar文件那么你可以把他们置入到corelib目录。例如:karaokecore使用SolrCell来索引化富文本内容因此那些用来解析和抽取富文本的jar文件被放到examplescoreskaraokelib为何使用多core?Solr实例支持多core比启用多index要好(domore)。多core同时解决了在生产环境下的一些关键需求:重建索引测试配置变更合并索引运行时重命名core为何多core不是默认的?多core是版本中才加的后更成熟。我们强烈建议你使用多core既是你现在的solrxml只配置了一个core虽然会比单个索引稍复杂但可以带来管理core上的好处。或许一天单个core可能最终RELOADandSTATUS命令又或许单个core最终会被废禁。多个core会是Solr将来支持大规模分布式索引的关键。因此以后可以期待更多。你可以得到更多的关于Solr的资料:http:wikiapacheorgsolrCoreAdmin、SOLR搭建企业搜索平台查询参数说明在做solr查询的时候solr提供了很多参数来扩展它自身的强大功能!以下是使用频率最高的一些参数!、常用q查询字符串必须的。查询语句(类似SQL)相关详细的操作还需lucene的query语法fl指定返回那些字段内容用逗号或空格分隔多个。start返回第一条记录在完整找到结果中的偏移位置开始一般分页用。rows指定返回结果最多有多少条记录配合start来实现分页。sort排序格式:sort=<fieldname><desc|asc>,<fieldname><desc|asc>…。示例:(scoredesc,priceasc)表示先“score”降序,再“price”升序默认是相关性降序。wt(writertype)指定输出格式可以有xml,json,php,phps,后面solr增加的要用通知我们因为默认没有打开。fl表示索引显示那些field(*表示所有field,score是solr的一个匹配热度)qop表示q中查询语句的各条件的逻辑操作AND(与)OR(或)hl是否高亮hlfl高亮fieldhlsnippets不太清楚(反正是设置高亮就可以了)hlsimplepre高亮前面的格式hlsimplepost高亮后面的格式facet是否启动统计facetfield统计fieldfq(filterquery)过虑查询作用:在q查询符合结果中同时是fq查询符合的例如:q=mmfq=datetime:TO找关键字mm并且datetime是到之间的。官方文档:http:wikiapacheorgsolrCommonQueryParameters#headeffdedfecd、不常用qop覆盖schemaxml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑)一般默认指定df默认的查询字段一般默认指定qt(querytype)指定那个类型来处理查询请求一般不用指定默认是standard。、其它indent返回的结果是否缩进默认关闭用indent=true|on开启一般调试json,php,phps,ruby输出才有必要用这个参数。version查询语法的版本建议不使用它由服务器指定默认值。、SOLR搭建企业搜索平台Solr查询语法solr的一些查询语法、首先假设我的数据里fields有:name,tel,address预设的搜寻是name这个字段,如果要搜寻的数据刚好就是name这个字段,就不需要指定搜寻字段名称。、查询规则:如欲查询特定字段(非预设字段),请在查询词前加上该字段名称加“:”(不包含”号)符号,例如:address:北京市海淀区上地软件园tel:xxxxx>q代表queryinput>version代表solr版本(建议不要变动此变量)>start代表显示结果从哪一笔结果资料开始,预设为代表第一笔,rows是说要显示几笔数据,预设为笔(因为有时查询结果可能有几百笔,但不需要显示所有结果,所以预设是从第一笔开始到第十笔)所以若要显示第到笔就改为:http:localhost:solrselectindent=onversion=q=address:北京市海淀区上地软件园tel:xxxxxversion=start=rows=indent=on(indent代表输出的xml要不要缩行预设为开启on)、另外,要限定输出结果的内容可用“fl=”加上你要的字段名称,如以下这个范例:http:localhost:solrselectindent=onversion=q=text:北京ORtext:亿度start=rows=fl=name,address,tel在fl=之后加上了name,adress,tel所以结果会如下:<resultname=”response”numFound=”″start=”″><doc><strname=”name”>北京亿度<str><strname=”address”>北京市海淀区上地软件园<str><strname=”tel”>xxxxxx<str><doc><doc><strname=”name”>北京亿度<str><strname=”address”><strname=”tel”>xxxxxx<str><doc><result>、查询name或address:直接输入查询词,如:亿度送出的内容即为:name:亿度ANDaddress:海淀、若要搜寻联集结果,请在词与词间空格或加上大写“OR”(不包含”号)例如:text:海淀ORtext:亿度text:海淀OR亿度或海淀亿度或name:亿度ORtel:xxxxxx或name:亿度tel:xxxxxx、若要搜寻交集结果,请在词与词间加上大写“AND”或“”(不包含”号)例如:text:海淀AND亿度或text:海淀text:亿度或name:亿度ANDtel:xxxxxx或name:(亿度海淀)、排除查询在要排除的词前加上“”(不包含”号)号例如:海淀亿度搜寻结果不会有包含亿度的词的结果在内、Group搜寻使用“()”来包含一个group如希望搜寻在店名字段内同时有“台北”(不包含”号)及“火车站”(不包含”号)、增加权重:如要搜寻“北京加油站”(不包含”号)但因为回传太多笔资料内有“中华”(不包含”号)或“加油站”(不包含”号)的结果,所以想要把有包含“加油站”(不包含”号)的数据往前排,可使用“^”(不包含”号)符号在后面加上愈增加的权重数,像是“″,则可以这样做:北京加油站^会同时搜寻含有北京或加油站的结果,并把加油站这个词加权所以搜寻时会先判断加油站这一个词在搜寻结果中的比重,甚至假设一笔数据内加油站出现过两次以上的就更加会有优先权。查询时在查询词后加上“^”(不包含”号)再加上权重分数例如:亿度AND“北京”^或亿度^OR北京、Wildcard搜寻使用“*”符号如果输入“中国*银”(不包含”号),结果会有中国信托商业银行,中国输出入银行图书阅览室,中国商银证券中国及银之间可夹任何长短字词、SOLR搭建企业搜索平台数据库数据导入到Solr详细请参考地址:http:rqjavaeyecomblog写程序可以将数据读出条如果你的内存够大可以是条甚至更多然后放入Collection中批量提交至solr。或者读取数据写入xml文件中再将该文件提交到solr等等。但是我们还可以通过配置文件直接读取数据库建立索引。一、提供对应数据库的jdbc驱动。将jdbc驱动放在TOMCATHOMEwebappssolrWEBINFlib目录下。二、在C:solrtomcatsolrconf目录下新建db文件夹在db文件夹中新建dbdataconfigxml内容如下:<dataConfig><dataSourcetype="JdbcDataSource"driver="oraclejdbcdriverOracleDriver"url="jdbc:oracle:thin:::数据库名"user="用户名"password="密码"><documentname="messages"><entityname="message"transformer="ClobTransformer"query="select*fromtbmessage"><fieldcolumn="ID"name="id"><fieldcolumn="TITLE"name="title"><fieldcolumn="CONTENT"clob="true"name="content"><fieldcolumn="SENDTIME"name="sendtime"><entity><document><dataConfig>三、修改C:solrtomcatsolrconf目录下的solrconfigxml文件。在相应的位置添加如下代码:<!DataImportHandler><requestHandlername="dataimport"class="orgapachesolrhandlerdataimportDataImportHandler"><lstname="defaults"><strname="config">C:solrtomcatsolrconfdbdbdataconfigxml<str><lst><requestHandler>注:C:solrtomcatsolrconfdbdbdataconfigxml是dbdataconfigxml的存放路径你要根据实际情况而定。document:一个文档也就是lucene的document这个没什么解释的。entity:主要针对的是一个数据库表。filed:属性column是数据库的字段name是filed的名字即schema中的fieldname。更多请参考官方wiki:http:wikiapacheorgsolrDataImportHandler四、启动TOMCAT输入地址进行导入导入分为多种模式:我用的是完全导入模式。http:localhost:solrdataimportcommand=fullimport结果:C:solrtomcatsolrconfdbdbdataconfigxmlfullimportidle::IndexingcompletedAddedUpdated:documentsDeleteddocuments::::::ThisresponseformatisexperimentalItislikelytochangeinthefuture五、再去查询你刚才提交的数据。上面的例子只不过是很简单的一个部分。针对solr的MultiCore通过配置dbdataconfigxml也可以实现还有多表或者多表关联等等操作只要在dbdataconfigxml配置清楚都可以进行数据的导入。在solr中还有更多的扩展功能这些功能为重建索引提供能很方便的操作。而且datasource不单单指的是database可以是xml文件还可以是来自网络上的等等。、SOLR搭建企业搜索平台增量更新索引、首先要确认表中有lastmodified字段。、修改C:solrtomcatsolrconfdbdbdataconfigxml文件内容如下:<dataConfig><dataSourcetype="JdbcDataSource"driver="oraclejdbcdriverOracleDriver"url="jdbc:oracle:thin:::数据库名"user="用户名"password="密码"><documentname="messages"><entityname="message"pk="ID"transformer="ClobTransformer"query="select*fromtbmessage"deltaQuery="selectidfromtbmessagewheretochar(lastmodified,'YYYYMMDDHH:MI:SS')>'${dataimporterlastindextime}'"><fieldcolumn="ID"name="id"><fieldcolumn="TITLE"name="title"><fieldcolumn="CONTENT"clob="true"name="content"><fieldcolumn="SENDTIME"name="sendtime"><entity><document><dataConfig>、重启tomcat。添加一条记录。访问:http:localhost:solrdataimportcommand=deltaimport再查询一下是不是可以查询到刚才添加的记录了。、SOLR搭建企业搜索平台字段增加权重在很多时候我们可能会需要增加某一个字段的权重以合理的显示搜索结果。例如:有一个schma有三个字段:chapterId,title,content我们希望某一个关键字如果在title中匹配了就要优先显示而在content中匹配了就放在搜索结果的后面。当然如果两者同时匹配当然没什么好说的了。看看solr中如何做到吧。title:(testtest)^content:(testtest)给title字段增加权重优先匹配关于^后面的数字经过我测试最佳值应该是有n个字段就写成n当然希望大家能更好的去测试!、SOLR搭建企业搜索平台Solr分词器、过滤器、分析器关于lucene的分析器分词器过滤器请看:http:lianjleejavaeyecomblog对一个document进行索引时其中的每个field中的数据都会经历分析(根据上面的一个博客可以知道分析就是组合分词和过滤)最终将一句话分成单个的单词去掉句子当中的空白符号大写转换小写复数转单数去掉多余的词进行同义词代换等等。如:Thisisablog!this,is,a会被去除最后最剩下blog。当然!这个符号也会被去除的。这个过程是在索引和查询过程中都会进行的而且通常两者进行的处理的都是一样的这样做是为了保证建立的索引和查询的正确匹配。分析器(Analyzer)分析器是包括两个部分:分词器和过滤器。分词器功能将句子分成单个的词元token过滤器就是对词元进行过滤。solr自带了一些分词器如果你需要使用自定义的分词器那么就需要修改schemaxml文件。schemaxml文件允许两种方式修改文本被分析的方式通常只有field类型为solrTextField的field的内容允许定制分析器。方法一:使用任何orgapacheluceneanalysisAnalyzer的子类进行设定。<fieldTypename="text"class="solrTextField"><analyzerclass="orgwlteaanalyzerluceneIKAnalyzer"><fieldType>方法二:指定一个TokenizerFactory后面跟一系列的TokenFilterFactories(它们将按照所列的顺序发生作用)Factories被用来创建分词器和分词过滤器它们用于对分词器和分词过滤器的准备配置这样做的目的是为了避免theoverheadofcreationviareflection。<analyzertype="index"><tokenizerclass="orgwlteaanalyzersolrIKTokenizerFactory"isMaxWordLength="false">……<analyzer><analyzertype="query"><tokenizerclass="orgwlteaanalyzersolrIKTokenizerFactory"isMaxWordLength="true">……<analyzer>需要说明的一点是AnyAnalyzer,TokenizerFactory,orTokenFilterFactory应该用带包名的全类名进行指定请确保它们位于Solr的classpath路径下。对于orgapachesolranalysis*包下的类仅仅通过solr*就可以进行指定。如果你需要使用自己的分词器和过滤器你就需要自己写一个factory它必须是BaseTokenizerFactory(分词器)或BaseTokenFilterFactory(过滤器)的子类。就像下面一样。publicclassMyFilterFactoryextendsBaseTokenFilterFactory{publicTokenStreamcreate(TokenStreaminput){returnnewMyFilter(input)}}对于IK版本已经完全支持了solr的分词这样就不用自己来编写了而对于中文的切词的话ik对solr的支持已经很完美了。Solr提供了哪些TokenizerFactories?solrLetterTokenizerFactory创建orgapacheluceneanalysisLetterTokenizer分词举例:"Ican't"==>"I","can","t"字母切词。solrWhitespaceTokenizerFactory创建orgapacheluceneanalysisWhitespaceTokenizer主要是切除所有空白字符。solrLowerCaseTokenizerFactory创建orgapacheluceneanalysisLowerCaseTokenizer分词举例:"Ican't"==>"i","can","t"主要是大写转小写。solrStandardTokenizerFactory创建orgapacheluceneanalysisstandardStandardTokenizer分词举例:"IBMcat'scan't"==>ACRONYM:"IBM",APOSTROPHE:"cat's",APOSTROPHE:"can't"说明:该分词器会自动地给每个分词添加type以便接下来的对type敏感的过滤器进行处理目前仅仅只有StandardFilter对Token的类型是敏感的。solrHTMLStripWhitespaceTokenizerFactory从结果中除去HTML标签将结果交给WhitespaceTokenizer处理。例子:my<ahref="wwwfoobar">link<a>mylink<xml><br>hello<!comment>hellohello<script><f('<internal><script>')><script>helloifa<bthenprintaifa<bthenprintahello<tdheight=nowrapalign="left">helloab#AlphaOmegaOmegaa<bAAlphaOmegaΩsolrHTMLStripStandardTokenizerFactory从

类似资料

编辑推荐

象棋全国10冠军残局妙着.pdf

文言复式虚词.pdf

身体活:现代叙事中的欲望对象.pdf

中国状元殿试卷大全02·明洪武至正德 邓洪波、龚抗云编着.pdf

中国状元殿试卷大全01·唐至元 邓洪波、龚抗云编着.pdf

职业精品

精彩专题

上传我的资料

精选资料

热门资料排行换一换

  • 蔡元培全集+第一卷.pdf

  • 樊百川《中国轮船航运业的兴起》(…

  • 《护生画集 上》丰子恺绘1999…

  • 《生命起源的七条线索》.pdf

  • 《在最深的红尘里重逢 仓央嘉措诗…

  • 中国现代戏剧史稿.pdf

  • 从结构主义到解构主义 (2).p…

  • 隶书流变及审美特色.pdf

  • 34.图腾制度.pdf

  • 资料评价:

    / 19
    所需积分:1 立即下载

    意见
    反馈

    返回
    顶部