企业级搜索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 日志 出现以下异常
- java.lang.NoClassDefFoundError: Failed to initialize Apache Solr: Could not find necessary SLF4j logging jars.
- If using Jetty, the SLF4j logging jars need to go in the jetty lib/ext directory. For other containers,
- the corresponding directory should be used. For more information, see: http://wiki.apache.org/solr/SolrLogging
- at org.apache.solr.servlet.CheckLoggingConfiguration.check(CheckLoggingConfiguration.java:27)
- at org.apache.solr.servlet.BaseSolrFilter.<clinit>(BaseSolrFilter.java:30)
可用看到缺少SLF4j包 应该去 应该去 解压包 /server/lib/ext下找到并拷贝到 tomcat/solr/lib目录下 然后重启
继续访问 出现以下错误
- java.lang.NoSuchMethodError: javax.servlet.ServletInputStream.isFinished()Z
- org.apache.solr.servlet.SolrDispatchFilter.consumeInputFully(SolrDispatchFilter.java:284)
- org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:274)
- org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:208)
- org.apache.solr.common.SolrException: Error processing the request. CoreContainer is either not initialized or shutting down.
- org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:217)
- org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:208)
3》配置solrhome
找到 tomcat\solr\WEB-INF\web.xml 编辑 找到以下这段(配置solrhome) 去掉注释 将第二个参数配置为本地任意一个目录即可
- <env-entry>
- <env-entry-name>solr/home</env-entry-name>
- <env-entry-value>D:\learn\solr-5.5.4\home</env-entry-value>
- <env-entry-type>java.lang.String</env-entry-type>
- </env-entry>
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的类型定义,唯一标识符等
常用配置如下:
- 定义字段 _version_ 类型为long indexed="true" 会进行分词索引 stored="true"表示存储到磁盘
- <field name="_version_" type="long" indexed="true" stored="true"/>
- 定义字段 id required="true" 表示所有的document必须添加id字段 multiValued="false" 表示是否是多值字段
- <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
- 定义动态字段 所以_i结尾的字段都可以写入到当前的core
- <dynamicField name="*_i" type="int" indexed="true" stored="true"/>
- 定义唯一标识符的字段
- <uniqueKey>id</uniqueKey>
- 定义字段类型的别名
- <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
- 表示lucene版本
- <luceneMatchVersion>5.5.4</luceneMatchVersion>
- 表示数据目录 默认是data目录
- <dataDir>${solr.data.dir:}</dataDir>
- 自动提交配置
- <autoCommit>
- 当超过15000ms后自动提交所有数据
- <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
- 是否马上就可以查询到
- <openSearcher>false</openSearcher>
- </autoCommit>
- 表示当路径为 /select时查询所有的数据
- <requestHandler name="/select" class="solr.SearchHandler">
- <!-- default values for query parameters can be specified, these
- will be overridden by parameters in the request
- -->
- <lst name="defaults">
- <str name="echoParams">explicit</str>
- <int name="rows">10</int>
- </lst>
- </requestHandler>