施磊磊的双周汇报书面版10.docx

上传人:b****8 文档编号:10331858 上传时间:2023-02-10 格式:DOCX 页数:23 大小:109.22KB
下载 相关 举报
施磊磊的双周汇报书面版10.docx_第1页
第1页 / 共23页
施磊磊的双周汇报书面版10.docx_第2页
第2页 / 共23页
施磊磊的双周汇报书面版10.docx_第3页
第3页 / 共23页
施磊磊的双周汇报书面版10.docx_第4页
第4页 / 共23页
施磊磊的双周汇报书面版10.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

施磊磊的双周汇报书面版10.docx

《施磊磊的双周汇报书面版10.docx》由会员分享,可在线阅读,更多相关《施磊磊的双周汇报书面版10.docx(23页珍藏版)》请在冰豆网上搜索。

施磊磊的双周汇报书面版10.docx

施磊磊的双周汇报书面版10

双周汇报

Solr学习笔记

ApacheSolr是一个开源的搜索服务器,Solr使用Java语言开发,主要基于HTTP和ApacheLucene实现。

定制Solr索引的实现方法很简单,用POST方法向Solr服务器发送一个描述所有Field及其内容的XML文档就可以了。

定制搜索的时候只需要发送HTTPGET请求即可,然后对Solr返回的信息进行重新布局,以产生利于用户理解的页面内容布局。

Solr1.3版本开始支持从数据库(通过JDBC)、RSS提要、Web页面和文件中导入数据,但是不直接支持从二进制文件格式中提取内容,比如MSOffice、AdobePDF或其他专有格式。

更重要的是,Solr创建的索引与Lucene搜索引擎库完全兼容。

通过对Solr进行适当的配置,某些情况下可能需要进行编码,Solr可以阅读和使用构建到其他Lucene应用程序中的索引。

此外,很多Lucene工具(如Nutch、Luke)也可以使用Solr创建的索引

Solr的特性包括:

✓高级的全文搜索功能

✓专为高通量的网络流量进行的优化

✓基于开放接口(XML和HTTP)的标准

✓综合的HTML管理界面

✓可伸缩性-能够有效地复制到另外一个Solr搜索服务器

✓使用XML配置达到灵活性和适配性

✓可扩展的插件体系

Solr使用Lucene并且进行了扩展

✓一个真正的拥有动态域(DynamicField)和唯一键(UniqueKey)的数据模式(DataSchema)

✓对Lucene查询语言的强大扩展!

✓支持对结果进行动态的分组和过滤

✓高级的,可配置的文本分析

✓高度可配置和可扩展的缓存机制

✓性能优化

✓支持通过XML进行外部配置

✓拥有一个管理界面

✓可监控的日志

✓支持高速增量式更新(FastincrementalUpdates)和快照发布(SnapshotDistribution)

Schema(模式)

✓定义域类型和文档的域

✓能够驱动智能处理

✓声明式的Lucene分析器规范

✓动态域能够随时增加域

✓拷贝域功能允许对一个域进行多种方式的索引,或者将多个域联合成一个可搜索的域

✓显式类型能够减少对域类型的猜测

✓能够使用外部的基于文件的终止词列表,同义词列表和保护词列表的配置

查询

✓拥有可配置响应格式(XML/XSLT,JSON,Python,Ruby)的HTTP接口

✓高亮的上下文搜索结果

✓基于域值和显式查询的片段式搜索(FacetedSearch)

✓对查询语言增加了排序规范

✓常量的打分范围(Constantscoringrange)和前缀式查询-没有idf,coord,或者lengthNorm因子,对查询匹配的词没有数量限制

✓函数查询(FunctionQuery)-通过关于一个域的数值或顺序的函数对打分进行影响

✓性能优化

核心

✓可插拔的查询句柄(QueryHandler)和可扩展的XML数据格式

✓使用唯一键的域能够增强文档唯一性

✓能够高效地进行批量更新和删除

✓用户可配置的文档索引变化触发器(命令)

✓并发控制的搜索器

✓能够正确处理数字类型,从而能够进行排序和范围搜索

✓能够控制缺失排序域的文档

✓支持搜索结果的动态分组

缓存

✓可配置的查询结果,过滤器,和文档缓存实例

✓可插拔的缓存实现

✓后台缓存热启:

当一个新的搜索器被打开时,可配置的搜索将它热启,避免第一个结果慢下来,当热启时,当前搜索器处理目前的请求。

✓后台自动热启:

当前搜索器缓存中最常访问的项目在新的搜索器中再次生成,能够在索引器和搜索器变化的时候高速缓存常查询的结果

✓快速和小的过滤器实现

✓支持自动热启的用户级别的缓存

复制

✓能够将使用rsync传输时改变的索引部分有效的发布

✓使用拉策略(PullStrategy)来简化增加搜索器

✓可配置的发布间隔能够允许对时间线和缓存使用进行权衡选择

管理接口

✓能够对缓存使用,更新和查询进行综合统计

✓文本分析调试器,能够显示每个分析器每个阶段的结果

✓基于WEB的查询和调试输出:

解析查询输出,Lucene的explain方法细节,能够解释为何某个文档打分低,被排除在结果中等等

Solr服务原理 

Solr对外提供标准的http接口来实现对数据的索引的增加、删除、修改、查询。

在Solr中,用户通过向部署在servlet容器中的SolrWeb应用程序发送HTTP请求来启动索引和搜索。

Solr接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。

通过HTTP以同样的方式返回响应。

默认配置返回Solr的标准XML响应,也可以配置Solr的备用响应格式。

索引 

可以向Solr索引servlet传递四个不同的索引请求:

1)add/update允许向Solr添加文档或更新文档。

直到提交后才能搜索到这些添加和更新。

2)commit告诉Solr,应该使上次提交以来所做的所有更改都可以搜索到。

3)optimize重构Lucene的文件以改进搜索性能。

索引完成后执行一下优化通常比较好。

如果更新比较频繁,则应该在使用率较低的时候安排优化。

一个索引无需优化也可以正常地运行。

优化是一个耗时较多的过程。

4)delete可以通过id或查询来指定。

按id删除将删除具有指定id的文档;按查询删除将删除查询返回的所有文档。

要实现添加文档索引则只需要调用搜索接口以HTTP POST的方式提交XML报文。

(索引接口:

http:

//master:

8080/solr/update),下面是添加文档的示例报文:

注:

多核心时为这个地址http:

//master:

8080/solr/core0/update/

  

    

    TWINX2048-3200PRO  

    CORSAIR  XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail  

    Corsair Microsystems Inc.  

    electronics  

    memory  

    CAS latency 2, 2-3-3-6 timing, 2.75v, unbuffered, heat-spreader  

    185  

    5  

    true  

    

    

    VS1GB400C3  

    CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail  

    Corsair Microsystems Inc.  

    electronics  

    memory  

    74.99  

    7  

    true  

    

  

搜索

要实现搜索则只需要调用搜索接口发送HTTP GET,示例:

http:

//master:

8080/solr/select?

indent=on&version=2.2&q=solr&start=0&rows=10&fl=*%2Cscore&qt=standard&wt=standard

注:

多核心时为这个地址http:

//master:

8080/solr/core0/select/

示例中,查询 词“ipad”的请求被提交,要求返回10个结果。

想知道更多有关各种可选查询选项的信息,请参看下文的“搜索语法”部分。

返回的搜索结果报文:

  

      

        0  

        6  

          

            10  

            0  

            *,score  

            true  

            content:

"faceted browsing"  

          

      

  

      

          

            1.058217  

              

                http:

//localhost/myBlog/solr-rocks-again.html  

                Solr is Great  

                solr,lucene,enterprise,search,greatness  

                Solr has some really great features, like faceted browsing and replication  

              

              

                Solr has some really great features, like faceted browsing and replication  

              

            2007-01-07T05:

04:

00.000Z  

              

                solr,lucene,enterprise,search,greatness  

              

            8  

            Solr is Great  

            http:

//localhost/myBlog/solr-rocks-again.html  

          

      

  

      

        

//localhost/myBlog/solr-rocks-again.html">  

              

                Solr has some really great features, like faceted  

                browsing and replication  

              

          

      

  

源码结构

目录结构说明

我们下载的Solr包后,进入Solr所在的目录,我们可以看到以下几个目录:

build、client、dist、example、lib、site、src。

下面分别对其进行介绍。

1)build:

该目录是在antbuild过程中生成的,其中包含了未被打包成jar或是war的class文件以及一些文档文件。

2)client:

该目录包含了特定语言的Solr客户端API,使得使用其他语言的用户能通过HTTP用XML与Solr进行通话。

现在该目录里面虽然包含javascript、python、ruby三个子目录,但是到目前为止只包含一部分的ruby的代码,其他语言仍是空的。

另外,Solr的Java客户端称为SolrJ,其代码位于src/solrj目录下面。

在之后的文章中我会详细介绍Solr客户端的使用。

3)dist:

该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。

还记得上一篇文章中,我们在build1.4版本的Solr源代码后需要部署example吗?

其实就是将该目录下面的apache-solr-1.4.war部署到Jetty上面去,并重命名为solr.war。

4)example:

这个目录实际上是Jetty的安装目录。

其中包含了一些样例数据和一些Solr的配置。

其中一些子目录也比较重要,这里也对它们稍作介绍。

●example/etc:

该目录包含了Jetty的配置,在这里我们可以将Jetty的默认端口从8983改为8080端口。

●将其中的8983端口换成8080端口。

注意更改端口后启动Jetty可能会提示你没有权限,你需要使用sudojava-jarstart.jar来运行。

●example/multicore:

该目录包含了在Solr的multicore中设置的多个home目录。

在之后的文章中我会对其进行介绍。

●example/solr:

该目录是一个包含了默认配置信息的Solr的home目录。

详见下面的“solrhome说明”

●example/webapps:

Jetty的webapps目录,该目录通常用来放置Java的Web应用程序。

在Solr中,前面提到的solr.war文件就部署在这里。

5)lib:

该目录包含了所有Solr的API所依赖的库文件。

其中包括Lucene,Apachecommonsutilities和用来处理XML的Stax库。

6)site:

该目录仅仅包含了Solr的官网的网页内容,以及一些教程的PDF文档。

7)src:

该目录包含了Solr项目的整个源代码。

这里对其各个子目录也做相应的介绍。

●src/java:

该目录存放的是Solr使用Java编写的源代码。

●src/scripts:

该目录存放的是配置Solr服务器的UnixBashShell脚本,在后面介绍多服务器配置中将会有重要的作用。

●src/solrj:

前面提到过该目录存放的是Solr的Java版本的客户端代码。

●src/test:

该目录存放的是测试程序的源代码和测试文件。

●src/webapp:

该目录存放的是管理Solr的Web页面,包括Servlet和JSP文件,其构成了前面提到的WAR文件。

管理Solr的JSP页面在web/admin目录下面,如果你有兴趣折腾Solr可以找到相应的JSP的页面对其进行设置

Solrhome说明

所谓的Solrhome目录实际上是一个运行的Solr实例所对应的配置和数据(Lucene索引)。

在上一篇文章中我提到过在Solr的example/solr目录就是一个Solr用做示例的默认配置home目录。

实际上example/multicore也是一个合法的Solrhome目录,只不过是用来做mult-core设置的。

那么我们来看看example/solr这个目录里面都有些什么。

example/solr目录下主要有以下一些目录和文件:

1)bin:

如果你需要对Solr进行更高级的配置,该目录建议用来存放Solr的复制脚本。

2)conf:

该目录下面包含了各种配置文件,下面列出了两个最为重要的配置文件。

其余的.txt和.xml文件被这两个文件所引用,如用来对文本进行特殊的处理。

●conf/schema.xml:

该文件是索引的schema,包含了域类型的定义以及相关联的analyzer链。

●conf/solrconfig.xml:

该文件是Solr的主配置文件。

●conf/xslt:

该目录包含了各种XSLT文件,能将Solr的查询响应转换成不同的格式,如:

Atom/RSS等。

3)data:

包含了Lucene的二进制索引文件。

4)lib:

该目录是可选的。

用来放置附加的JavaJAR文件,Solr在启动时会自动加载该目录下的JAR文件。

这就使得用户可以对Solr的发布版本(solr.war)进行扩展。

如果你的扩展并不对Solr本身进行修改,那么就可以将你的修改部署到JAR文件中放到这里。

Solr是如何找到运行所需要的home目录的呢?

Solr首先检查名为solr.solr.home的Java系统属性,有几种不同的方式来设置该Java系统属性。

一种不管你使用什么样的Java应用服务器或Servlet引擎都通用的方法是在调用Java的命令行中进行设置。

所以,你可以在启动Jetty的时候显式地指定Solr的home目录java-Dsolr.solr.home=solr/-jarstart.jar。

另一种通用的方法是使用JNDI,将home目录绑定到java:

comp/env/solr/home。

并向src/webapp/web/WEB-INF/web.xml添加以下一段代码:

1

2solr/home

3solr/

4java.lang.String

5

实际上这段XML在web.xml文件中已经存在,你只需要把原来注释掉的xml取消注释,添加你所要指向的home目录即可。

因为修改了web.xml文件,所以你需要运行antdist-war来重新打包之后再部署WAR文件。

最后,如果Solr的home目录既没有通过Java系统属性指定也没有通过JNDI指定,那么他将默认指向solr/。

在产品环境中,我们必须设置Solr的home目录而不是让其默认指向solr/。

而且应该使用绝对路径,而不是相对路径,因为你有可能从不同的目录下面启动应用服务器。

注:

Jetty是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。

Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。

开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

solr的各包的说明

分析ApacheSolr的各个包,力图详细地分析Solr的设计和架构。

ApacheSolr由12个包组成,如下:

1.org.apache.solr.analysis

2.org.apache.solr.core

3.org.apache.solr.request

4.org.apache.solr.schema

5.org.apache.solr.search

6.org.apache.solr.search.function

7.org.apache.solr.servlet

8.org.apache.solr.tst

9.org.apache.solr.update

10.org.apache.solr.util

11.org.apache.solr.util.test

12.org.apache.solr.util.xlst

我们先从使用者的角度出发,最先看到的当然是servlet,因为Solr本身是个独立的网络应用程序,需要在Servlet容器中运行来提供服务,所以servlet是用户接触的最外层。

我们看看org.apache.solr.servlet包。

这个包很简单,只有两个类:

SolrServlet和SolrUpdateServlet.我们很容易从类名中猜出这两个类的用途。

SolrServlet类继承HttpServlet类,只有四个方法:

∙init()

∙destroy()

∙doGet()

∙doPost()

SolrServlet类中除了普通的Java类对象(包括Servlet相关的)外,有四个Solr本身的类,还有一个Solr本身的异常。

其中两个类和一个异常属于org.apache.solr.core包,两个类属于org.apache.solr.request包。

属于core包的有:

∙Config:

∙SolrCore:

属于request包的有:

∙SolrQueryResponse:

∙QueryResponseWriter:

分析一下这个SolrServlet类。

首先servlet会调用init()方法进行初始化:

通过Context查找java:

comp/env/solr/home来确定Solr的主目录(home),接着调用Config.setInstanceDir(home)方法设置这个实例的目录。

然后通过SolrCore.getSolrCore()来获得一个SolrCore实例。

destroy()方法将会在Servlet对象销毁时调用,仅仅调用core.close()关闭SolrCore实例。

当用户请求进来时doPost()简单地将任务交给doGet()完成,主要的任务由doGe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1