Solr

官网:https://haomo-tech.com

作者:毫末科技

邮箱: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

参考:

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/* 命令测试解析
  • 解决办法:

3 参考

results matching ""

    No results matching ""