企业级搜索solr配置

一 。solr简介

    solr是以lucene为内核开发的企业级搜索应用  应用程序可以通过http请求方式来提交索引,查询索引,提供了比lucene更丰富的查询语言,是

一个高性能,高可用环境全文搜索引擎

二 。solr安装配置

     1》下载solr安装包  solr所有版本 (http://archive.apache.org/dist/lucene/solr/) 

           这里下载 solr-5.5.4

     2》安装 解压将solr-5.5.4\server\solr-webapp下的webapp 拷贝到tomcat\webapps目录下 改名为solr 启动tomcat

       直接访问 出现404  找到tomcat/logs/localhost.2017-08-17.log 日志  出现以下异常

[html]  view plain  copy
  1. java.lang.NoClassDefFoundError: Failed to initialize Apache Solr: Could not find necessary SLF4j logging jars.   
  2. If using Jetty, the SLF4j logging jars need to go in the jetty lib/ext directory. For other containers,   
  3. the corresponding directory should be used. For more information, see: http://wiki.apache.org/solr/SolrLogging  
  4.     at org.apache.solr.servlet.CheckLoggingConfiguration.check(CheckLoggingConfiguration.java:27)  
  5.     at org.apache.solr.servlet.BaseSolrFilter.<clinit>(BaseSolrFilter.java:30)  

 
       可用看到缺少SLF4j包 应该去 应该去 解压包 /server/lib/ext下找到并拷贝到 tomcat/solr/lib目录下  然后重启 
 

    继续访问 出现以下错误 

[html]  view plain  copy
  1. java.lang.NoSuchMethodError: javax.servlet.ServletInputStream.isFinished()Z  
  2.     org.apache.solr.servlet.SolrDispatchFilter.consumeInputFully(SolrDispatchFilter.java:284)  
  3.     org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:274)  
  4.     org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:208)  
    明显是Servlet版本不一致  tomcat6不支持solr5.54 加大tomcat版本 tomcat7也不支持 换成tomcat8  启动后访问 依然错误:

[html]  view plain  copy
  1. org.apache.solr.common.SolrException: Error processing the request. CoreContainer is either not initialized or shutting down.  
  2.     org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:217)  
  3.     org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:208)  
   是因为需要配置solrhome和solrhome的配置环境

   3》配置solrhome

     找到 tomcat\solr\WEB-INF\web.xml 编辑  找到以下这段(配置solrhome)  去掉注释 将第二个参数配置为本地任意一个目录即可 

[html]  view plain  copy
  1. <env-entry>  
  2.    <env-entry-name>solr/home</env-entry-name>  
  3.    <env-entry-value>D:\learn\solr-5.5.4\home</env-entry-value>  
  4.    <env-entry-type>java.lang.String</env-entry-type>  
  5. </env-entry>  
   找到solr解压包/server/solr目录拷贝所有文件到 以上web.xml指定的路径D:\learn\solr-5.5.4\home下 重启tomcat 访问

   http://localhost:8080/solor/index.html  或者 http://localhost:8080/solr/admin.html  

  

   4》配置core(core类似于数据库可以插入多个document(数据库表行)每个document拥有多个 field 数据库的列)

   solrhome下新建一个core目录  比如mycore

   拷贝 solr解压包下\server\solr\configsets\basic_configs到新建目录 mycore中

  进入solr管理网页 点击 core admin 添加该core

 

  点击Add core后 成功后 检查 mycore目录 发现多了 core.properties和data两个资源


 登陆solr管理网站发现 列表中多了mycore


 4》配置文件理解

    core/conf目录下的两个配置文件非常重要 

    managed-schema 主要用于配置 可以提交到该core的所有field定义,field的类型定义,唯一标识符等

    常用配置如下:

[html]  view plain  copy
  1. 定义字段 _version_ 类型为long  indexed="true" 会进行分词索引  stored="true"表示存储到磁盘  
  2. <field name="_version_" type="long" indexed="true" stored="true"/>  
  3. 定义字段 id required="true" 表示所有的document必须添加id字段 multiValued="false" 表示是否是多值字段  
  4. <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />   
  5. 定义动态字段 所以_i结尾的字段都可以写入到当前的core  
  6. <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>  
  7. 定义唯一标识符的字段  
  8. <uniqueKey>id</uniqueKey>  
  9. 定义字段类型的别名  
  10. <fieldType name="string" class="solr.StrField" sortMissingLast="true" />  
   solrconfig.xml  主要用于配置solor的主要配置信息 比如lucene版本 缓存 数据目录 请求路径映射 等 

[html]  view plain  copy
  1. 表示lucene版本  
  2. <luceneMatchVersion>5.5.4</luceneMatchVersion>  
  3. 表示数据目录 默认是data目录  
  4. <dataDir>${solr.data.dir:}</dataDir>   
  5. 自动提交配置  
  6. <autoCommit>   
  7.        当超过15000ms后自动提交所有数据  
  8.        <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>   
  9.        是否马上就可以查询到  
  10.        <openSearcher>false</openSearcher>   
  11. </autoCommit>  
  12. 表示当路径为 /select时查询所有的数据  
  13. <requestHandler name="/select" class="solr.SearchHandler">  
  14.     <!-- default values for query parameters can be specified, these  
  15.          will be overridden by parameters in the request  
  16.       -->  
  17.      <lst name="defaults">  
  18.        <str name="echoParams">explicit</str>  
  19.        <int name="rows">10</int>  
  20.      </lst>  
  21. </requestHandler>  

猜你喜欢

转载自blog.csdn.net/wujiangang5112/article/details/79078243
今日推荐