Solr
作者:毫末科技
邮箱:hxg@haomo-studio.com
以下文档针对solr 7.4有效。其他版本未试过!
1 索引类型
1.1 数据库索引
1.2 Office文档等索引
1.2.1 配置
在服务器端运行命令,创建collection:
cd /opt/solr
su solr
bin/solr create -c test-files # 此命令将创建目录:/var/solr/data/nextcloud
最重要的配置文件包括:
修改solrconfig.xml,在以下内容前面上加上一个dataimport的处理的Handler
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
配置solrconfig.xml中配置jar包的lib标签:
<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
<!-- dataimports的库 -->
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
<!-- 分词的库 -->
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex=".*\.jar" />
在目录/var/solr/data/zjkoa/conf/下增加文件data-config.xml。以下配置为增量索引
<?xml version="1.0" encoding="UTF8" ?>
<dataConfig>
<dataSource name="bin" type="BinFileDataSource" />
<document>
<entity name="f" dataSource="null" rootEntity="false"
processor="FileListEntityProcessor"
baseDir="/test"
fileName=".*\.(DOC)|(PDF)|(pdf)|(doc)|(docx)|(ppt)|(pptx)"
newerThan="'NOW-1DAYS'"
onError="skip"
recursive="true">
<field column="fileAbsolutePath" name="id"/>
<field column="fileAbsolutePath" name="path" />
<field column="fileSize" name="size" />
<field column="fileLastModified" name="lastModified" />
<entity name="tika"
dataSource="bin"
processor="TikaEntityProcessor"
url="${f.fileAbsolutePath}"
format="text"
onError="skip">
<field column="file" name="fileName"/>
<field column="dc:format" name="format" meta="true"/>
<field column="Author" name="author" meta="true"/>
<field column="title" name="title" meta="true"/>
<field column="text" name="content"/>
</entity>
</entity>
</document>
</dataConfig>
修改同目录下managed-schema,只需要添加自己定义的字段即可。
<field name="path" type="string" indexed="true" stored="true" />
<field name="author" type="string" indexed="true" stored="true" />
<field name="title" type="string" indexed="true" stored="true" />
<field name="format" type="string" indexed="true" stored="true" />
<field name="size" type="pint" indexed="true" stored="true" />
<field name="createTime" type="pdate" indexed="true" stored="true" />
<field name="lastModified" type="pdate" indexed="true" stored="true" />
<field name="fileName" type="text_general" indexed="true" stored="true"/>
<field name="content" type="text_general" indexed="true" stored="true"/>
重启solr,并等待十来分钟:
service solr restart
检查端口号是否可用:
netstat -plant|grep 8983
参考:
- 跟益达学Solr5之使用Tika从PDF中提取数据导入索引
- Apache TIKA---抽取多类型文件文本内容和文件的“隐藏信息”
- Solr 数据导入Handler
- solr7创建提取pdf,word内容创建索引
- Uploading Structured Data Store Data with the Data Import Handler
- Solr6.3 配置整理
1.2.2 使用自带中文分词
solr 7.4的docker自带中文分词:solr_home\contrib\analysis-extras\lucene-libs下的lucene-analyzers-smartcn-7.4.0.jar。
在managed-shchema添加中文分词的FieldType:
<!-- 中文分词 -->
<fieldType name="cn_text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
</fieldType>
1.3 网站索引
使用nutch进行网站索引
2 FAQ
ClassNotFound类似的找不到类的错误
- 解决办法:将jar包复制到/opt/solr/server/solr-webapp/webapp/WEB-INF/lib/目录,重启solr即可:service solr restart
java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: 'baseDir' value: /root/files is not a directory Processing Document # 1
- 解决办法:目标目录 /root/files必须允许为solr用户可以cd进入。将files放到根目录或者/var/solr目录下均可(或者其他solr用户可以cd进入的目录)
运行 bin/post -c test /test/*报错:org.apache.solr.common.SolrException: Error Instantiating requestHandler, solr.extraction.ExtractingRequestHandler failed to instantiate org.apache.solr.request.SolrRequestHandler
TikaEntityProcessor不起作用
- 原因:采用cd /opt/solr && bin/post -c test /test/* 命令测试解析
- 解决办法: