zoukankan      html  css  js  c++  java
  • Solr 6.6环境搭建与Solr定义(一)

    Solr6.6理解和环境搭建

    前言

         为什么要引入Solr,它到底有什么优势。假想有这样一种情况,当我们在oracle去查询一些东西,无非是使用like或者join(当查询条件多,涉及的多表的话)这几种操作。当数据量大的时候,很难相信在大型数据库上去执行高速的查询,有以下两点原因:一是,数据库本身在性能上缺乏亮点,所以我们总提性能。二是,松散的文本,查询的话基本都是基于like,而join和like是数据库的性能杀手,与最求高效快速的理念相违背。所以我们需要一种和sql完全不同的数据检索方式,由此引出了solr。

    1. 1.        官方定义:

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

    Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。

    简单来说:solr就是一个开源的搜索引擎框架。

     

    1. 2.        原理:

         Solr对外提供标准的http接口来实现对数据的索引的增加、删除、查询。在 Solr 中,用户通过向部署在servlet 容器中的 Solr Web 应用程序发送 HTTP 请求来启动索引和搜索。Solr 接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。通过 HTTP 以同样的方式返回响应。默认配置返回Solr 的标准 XML 响应,也可以配置Solr 的备用响应格式。
    可以向 Solr 索引 servlet 传递四个不同的索引请求:
    add/update 允许向 Solr 添加文档或更新文档。直到提交后才能搜索到这些添加和更新。
    commit 告诉 Solr,提交后就可以搜索到。
    optimize 重构 Lucene 的文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。(官方:执行明确的优化,导致所有段的合并到一个。)
    delete 可以通过 id 或查询来指定。按 id 删除将删除具有指定 id 的文档;按查询删除将删除查询返回的所有文档。

    也就是说:solr可以对数据进行增加、删除、查询。

     

    1. 3.        搭建solr环境条件

                            JDK:jdk1.8.0

                           开发环境:eclipse4.7

                           运行环境:apache-tomcat-8.0.32

                           Solr:solr-6.6.0

     

    1. 4.        搭建solr

    解压solr-6.6.0,打开解压的目录:

     

    binSolr的脚本启动工具目录。

    contrib放关于solr的扩展。

    dist在这里能找到Solr的核心JAR包和扩展JAR包。当我们试图把Solr嵌入到某个应用程序的时候会用到核心JAR包。

    distàsolrj-lib包含构建基于Solr的客户端时会用到的JAR包。

    distàtest-framework包含测试Solr时候会用到的JAR包。

    docs该文件夹里面存放的是Solr文档,离线的静态HTML文件,还有API的描述。

    example包含Solr的简单示例。

    licenses各种许可和协。

    server在本地把Solr作为服务运行的必要文件都存放在这里。

     

    1. 5.        部署属于自己的Solr

    a)         solr-6.6.0serversolr-webapp下的webapp复制到tomcatwebapps目录下,并改名为solr(名字可以改成其他)

     

     

    b)         solr-6.6.0serverlibextjar包复制到apache-tomcat-8.0.32webappssolrWEB-INFlib目录下

    solr-6.6.0dist下的solr-dataimporthandler-6.6.0.jarsolr-dataimporthandler-extras-6.6.0.jar复制到apache-tomcat-8.0.32webappssolrWEB-INFlib目录下

    solr-6.6.0serverlib下的以metrics开头的5jar包复制到apache-tomcat-8.0.32webappssolrWEB-INFlib目录下,这三步的目标路径都是一样的。

    如下图:

     

     

     

    c)          接下来创建存放core的目录,我选择的是E盘创建,tomcat是在D盘,在E盘创建solrhome文件夹,将solr-6.6.0serversolr下的所有文件复制到E:solrhome。如下图:

     

    d)         tomcat下的solr里的配置文件来指定我创建的存储core的目录。

    打开apache-tomcat-8.0.32webappssolrWEB-INF下的web.xml,定位到40行,将下面一段注解打开,并修改<env-entry-value>值为E:/solrhome

    并把168行以及以下的注解掉,为什么要注解掉呢?这是一段权限代码,也就是你在浏览器打开solr,其他人也可以登录,并对core进行优化,占用和消耗资源,从而在打开solr时进行账号密码登录,这里我就全部注解掉。如下图:

     

     

    注解掉
    <!-- Get rid of error message -->
      <!--<security-constraint>
        <web-resource-collection>
          <web-resource-name>Disable TRACE</web-resource-name>
          <url-pattern>/</url-pattern>
          <http-method>TRACE</http-method>
        </web-resource-collection>
        <auth-constraint/>
      </security-constraint>
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>Enable everything but TRACE</web-resource-name>
          <url-pattern>/</url-pattern>
          <http-method-omission>TRACE</http-method-omission>
        </web-resource-collection>
      </security-constraint>-->

    e)         apache-tomcat-8.0.32webappssolrWEB-INF目录下创建classes文件夹,并将solr-6.6.0server esources下的log4j.properties复制过去,如下图:

     

    f)          环境搭建完成,启动tomcat,访问localhost:8080/solr/index.html,成功访问。

     

  • 相关阅读:
    Android跨进程通信AIDL服务*
    Android跨进程通信广播(Broadcast)*
    Android跨进程通信Content Provider*
    Android跨进程通信访问其他应用程序的Activity*
    Android RecyclerView实现加载多种条目类型*
    Android ListView多布局*
    Android屏幕横竖屏切换和生命周期管理的详细总结*
    Android中的asserts和res/raw资源目录*
    Android系统服务 —— WMS与AMS*
    Android中为什么主线程不会因为Looper.loop()方法造成阻塞
  • 原文地址:https://www.cnblogs.com/xiao-zhang-blogs/p/7327814.html
Copyright © 2011-2022 走看看