Solr开发文档Solr是一种可供企业使用的、基于Lucene的搜索服务器,它支持层面搜索、命中醒目显示和多种输出格式。在这篇文章中,将介绍Solr并展示如何轻松地将其表现优异的全文本搜索功能加入到Web应用程序中。开发环境:System:WindowsWebBrowser:IE6+、Firefox3+JDK:1.6+JavaEEServer:tomcat5.0.2.8、tomcat6IDE:eclipse、MyEclipse8开发依赖库:JavaEE5、solr3.4个人博客::hoojo_@126.com一、配置和安装solr1、首先去apache官方网站下载solr,下载地址目前最新的是3.4的版本2、下载后解压目录如下client是一个ruby实现的示例,这个我们暂时不管contrib有一些功能模块是需要的jar包dist是打包发布好的工程war包docs是帮助文档example是示例,里面有打包部署好的solr工程示例和servlet容器jetty。如果你没有tomcat可以直接使用Jetty服务器部署你的solr示例。3、发布、部署solr示例A、利用自带的Jetty服务器首先在dos命令中进入到下载好的solr解压的目录apache-solr-3.4.0的example目录cdE:\JAR\solr\apache-solr-3.4.0\example然后利用java命令,启动jetty服务器。Java–jarstart.jar启动Jetty成功后,如果没有看到错误消息,你可以看到端口信息。如果你的端口冲突了,你可以到解压的solr示例包的example/etc的jetty.xml中,修改端口port信息。Setname=portSystemPropertyname=jetty.portdefault=8983//SetB、利用tomcat发布solr示例将下载的solr解压后,进入apache-solr-3.4.0\dist目录,将里面的solr.war放到D:\tomcat-6.0.28\webapps目录下,启动tomcat会自动解压。(当然,你也可以手动解压放到wabapps目录下)当然你也可以设置context指向你的solr工程,在D:\tomcat-6.0.28\conf\Catalina\localhost目录加入solr.xml配置,配置如下:ContextdocBase=D:\solr.wardebug=0crossContext=trueEnvironmentname=solr/hometype=java.lang.Stringvalue=D:\solroverride=true//Context上面的2步都是一样的,这样还没有完。启动后你可能会看到如下错误:我们需要将一些配置和index库文件也放到解压好的solr工程下。我们到解压的apache-solr-3.4.0\example\solr目录下,将里面的conf和data目录copy到刚才我们部署的D:\tomcat-6.0.28\webapps\solr工程目录下。或是copy到你的solr.xml中的context指定的路径下工程目录中。重启tomcat就ok了。4、这个时候你就可以访问你就可以看到如下界面:在QueryString中输入solr,点击Search就可以查询到相应的结果,结果以xml形式返回。当然你也可以设置返回数据类型为json。?xmlversion=1.0encoding=UTF-8?responselstname=responseHeaderintname=status0/intintname=QTime0/intlstname=paramsstrname=indenton/strstrname=start0/strstrname=qsolr/strstrname=version2.2/strstrname=rows10/str/lst/lstresultname=responsenumFound=1start=0docarrname=catstrsoftware/strstrsearch/str/arrarrname=featuresstrAdvancedFull-TextSearchCapabilitiesusingLucene/strstrOptimizedforHighVolumeWebTraffic/strstrStandardsBasedOpenInterfaces-XMLandHTTP/strstrComprehensiveHTMLAdministrationInterfaces/strstrScalability-EfficientReplicationtootherSolrSearchServers/strstrFlexibleandAdaptablewithXMLconfigurationandSchema/strstrGoodunicodesupport:h¨¦llo(hellowithanaccentoverthee)/str/arrstrname=idSOLR1000/strboolname=inStocktrue/booldatename=incubationdate_dt2006-01-17T00:00:00Z/datestrname=manuApacheSoftwareFoundation/strstrname=nameSolr,theEnterpriseSearchServer/strintname=popularity10/intfloatname=price0.0/float/doc/result/response二、Solr理论1、solr基础因为Solr包装并扩展了Lucene,所以它们使用很多相同的术语。更重要的是,Solr创建的索引与Lucene搜索引擎库完全兼容。通过对Solr进行适当的配置,某些情况下可能需要进行编码,Solr可以阅读和使用构建到其他Lucene应用程序中的索引。在Solr和Lucene中,使用一个或多个Document来构建索引。Document包括一个或多个Field。Field包括名称、内容以及告诉Solr如何处理内容的元数据。例如,Field可以包含字符串、数字、布尔值或者日期,也可以包含你想添加的任何类型,只需用在solr的配置文件中进行相应的配置即可。Field可以使用大量的选项来描述,这些选项告诉Solr在索引和搜索期间如何处理内容。现在,查看一下表1中列出的重要属性的子集:属性名称描述IndexedIndexedField可以进行搜索和排序。你还可以在indexedField上运行Solr分析过程,此过程可修改内容以改进或更改结果。StoredstoredField内容保存在索引中。这对于检索和醒目显示内容很有用,但对于实际搜索则不是必需的。例如,很多应用程序存储指向内容位置的指针而不是存储实际的文件内容。2、solr索引操作在Solr中,通过向部署在servlet容器中的SolrWeb应用程序发送HTTP请求来启动索引和搜索。Solr接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。通过HTTP以同样的方式返回响应。默认配置返回Solr的标准XML响应。你也可以配置Solr的备用响应格式,如json、csv格式的文本。索引就是接受输入元数据(数据格式在schema.xml中进行配置)并将它们传递给Solr,从而在HTTPPostXML消息中进行索引的过程。你可以向Solr索引servlet传递四个不同的索引请求:add/update允许您向Solr添加文档或更新文档。直到提交后才能搜索到这些添加和更新。commit告诉Solr,应该使上次提交以来所做的所有更改都可以搜索到。optimize重构Lucene的文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。delete可以通过id或查询来指定。按id删除将删除具有指定id的文档;按查询删除将删除查询返回的所有文档。Lucene中操作索引也有这几个步骤,但是没有更新。Lucene更新是先删除,然后添加索引。因为更新索引在一定情况下,效率没有先删除后添加的效率好。3、搜索添加文档后,就可以搜索这些文档了。Solr接受HTTPGET和HTTPPOST查询消息。收到的查询由相应的SolrRequestHandler进行处理。solr查询参数描述:参数描述示例qSolr中用来搜索的查询。有关该语法的完整描述,请参阅参考资料。可以通过追加一个分号和已索引且未进行断词的字段(下面会进行解释)的名称来包含排序信息。默认的排序是scoredesc,指按记分降q=myField:JavaANDotherField:developerWorks;dateasc序排序。此查询搜索指定的两个字段,并根据一个日期字段对结果进行排序。start将初始偏移量指定到结果集中。可用于对结果进行分页。默认值为0。start=15返回从第15个结果开始的结果。rows返回文档的最大数目。默认值为10。rows=25,返回25个结果集fq提供一个可选的筛选器查询。查询结果被限制为仅搜索筛选器查询返回的结果。筛选过的查询由Solr进行缓存。它们对提高复杂查询的速度非常有用。任何可以用q参数传递的有效查询,排序信息除外。hl当hl=true时,在查询响应中醒目显示片段。默认为false。参看醒目显示参数(见参考资料)。hl=truefl作为逗号分隔的列表指定文档结果中应返回的Field集。默认为“*”,指所有的字段。“score”指还应返回记分。*,scoresort排序,对查询结果进行排序,参考sort=dateasc,pricedesc4、solr模式上面有提到schema.xml这个配置,这个配置可以在你下载solr包的安装解压目录的apache-solr-3.4.0\example\solr\conf中找到,它就是solr模式关联的文件。打开这个配置文件,你会发现有详细的注释。模式组织主要分为三个重要配置types部分是一些常见的可重用定义,定义了Solr(和Lucene)如何处理Field。也就是添加到索引中的xml文件属性中的类型,如int、text、date等fileds是你添加到索引文件中出现的属性名称,而声明类型就需要用到上面的types其他配置有uniqueKey唯一键,这里配置的是上面出现的fileds,一般是id、url等不重复的。在更新、删除的时候可以用到。defaultSearchField默认搜索属性,如q=solr就是默认的搜索那个字段solrQueryParser查询转换模式,是并且还是或者(and/or)schema配置类型fieldTypename=textclass=solr.TextFieldpositionIncrementGap=100analyzertype=indextokenizerclass=solr.WhitespaceTokenizerFactory/filterclass=solr.StopFilterFactoryignoreCase=