【应用】Apache Solr

本文详细介绍了Apache Solr 8.5.1的单机部署过程,包括创建Solr Home目录、启动及配置Solr服务器、创建Core、导入数据并配置DataImportHandler(DIH)从JDBC数据库导入数据,同时讲解了如何处理数据库密码加密和查询操作。

本文讲述Apache Solr 8.5.1的单机应用。

创建Solr Home目录

在本地电脑上创建一个F:\blog-solr的目录作为主目录,将solr-8.5.1\server\solr\solr.xml复制到F:\blog-solr下。

启动

指定启动端口,指定Solr Home目录,在solr-8.5.1\bin目录下输入solr start -p 8983 -s F:\blog-solr启动Solr服务器。

修改默认端口

Windows下,打开solr-8.5.1\bin\solr.cmd

有一段描述参数信息的:

-p port    Specify the port to start the Solr HTTP listener on; default is 8983
"             The specified port (SOLR_PORT) will also be used to determine the stop port"
"             STOP_PORT=(\$SOLR_PORT-1000) and JMX RMI listen port RMI_PORT=(\$SOLR_PORT+10000). "
"             For instance, if you set -p 8985, then the STOP_PORT=7985 and RMI_PORT=18985"

找到下面一段代码,修改默认端口为8081

IF "%SOLR_PORT%"=="" set SOLR_PORT=8081

修改默认Solr Home

Windows下,打开solr-8.5.1\bin\solr.cmd

-s dir    Sets the solr.solr.home system property; Solr will create core directories under
            this directory. This allows you to run multiple Solr instances on the same host
            while reusing the same server directory set using the -d parameter. If set, the
            specified directory should contain a solr.xml file, unless solr.xml exists in Zookeeper.
            This parameter is ignored when running examples (-e), as the solr.solr.home depends
            on which example is run. The default value is server/solr. If passed a relative dir
            validation with the current dir will be done before trying the default server/^<dir^>

找到下面一段代码,将默认Solr Home目录改为F:\blog-solr

:start_solr
IF "%SOLR_HOME%"=="" set "SOLR_HOME=F:\blog-solr"
IF EXIST "%cd%\%SOLR_HOME%" set "SOLR_HOME=%cd%\%SOLR_HOME%"

IF NOT EXIST "%SOLR_HOME%\" (
  IF EXIST "%SOLR_SERVER_DIR%\%SOLR_HOME%" (
    set "SOLR_HOME=%SOLR_SERVER_DIR%\%SOLR_HOME%"
  ) ELSE (
    set "SCRIPT_ERROR=Solr home directory %SOLR_HOME% not found!"
    goto err
  )
)

创建Core

打开浏览器输入http://localhost:8983/,进入Solr Admin管理控制台。

点击左边的Core Admin,展示添加Core的弹窗。

修改name值为article_core,instanceDir值为article_core,schema值为managed-schema

点击Add Core按钮,然后就弹出一串错误信息:

Error CREATEing SolrCore ‘article_core’: Unable to create core [article_core] Caused by: Can’t find resource ‘solrconfig.xml’ in classpath or ‘F:\blog-solr\article_core’

意思是在F:\blog-solr\article_core目录下没有找到solrconfig.xml文件,创建article_core失败。

solr-8.5.1\server\solr\configsets\_default下的conf目录复制到F:\blog-solr\article_core\目录下。

点击Add Core按钮,创建article_core就成功了,在F:\blog-solr\article_core\目录下会创建一个core.properties文件和data文件夹。

打开F:\blog-solr\article_core\core.properties文件,将schema=schema.xml改成schema=managed-schema

导入数据

点击左侧的下拉框,选择article_core,选择Dataimport

提示信息:The solrconfig.xml file for this index does not have an operational DataImportHandler defined!

意思是solrconfig.xml文件中没有定义DataImportHandler。

配置DIH

在solrconfig.xml文件中配置DIH

参考官方文档Uploading Structured Data Store Data with the Data Import Handler

solrconfig.xml中配置DataImportHandler,定义在<conf>标签内:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    <str name="config">database\mysql\blog-article-conf.xml</str>
  </lst>
</requestHandler>

config参数指定包含数据源规范的DIH(Data Import Handler)配置文件的位置、如何获取数据、要获取什么数据以及如何处理它来生成要发布到索引的Solr文档。

可以有多个DIH配置文件。每个文件在solrconfig.xml文件中需要一个单独的定义,指定文件的路径。

配置DIH配置文件

新建F:\blog-solr\article_core\conf\database\mysql\blog-article-conf.xml文件,添加内容:

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
  <dataSource  // 1
      driver="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost:3306/blog-20171206" 
      user="root" 
      password="root"/>  // 2
  <document>  // 3
  <entity  // 4
      name="blogArticle" 
      query="select article_id,article_title,article_content from blog_article"> 
    <field column="article_id" name="articleId" />
    <field column="article_title" name="articleTitle" />
    <field column="article_content" name="articleContent" />
  </entity>
  </document>
</dataConfig>
  1. dataSource中内容是JDBC驱动程序的信息,其他允许的属性包括是否自动提交到Solr、JDBC连接中使用的批处理大小和readOnly只读标志。
  2. 如果数据库没有设置密码,则password属性是可选的。或者,可以参考Encrypting a Database Password对密码进行加密。
  3. document元素可以包含多个entity元素。entity元素可以嵌套。

加密数据库密码

openssl工具下载地址:点击下载

如何在Windows上安装opensslHow To Install OpenSSL on Windows

  1. 使用openssl工具进行加密,加密密钥将存储在一个文件中,该文件只对solr进程具有可读性:
$ echo -n "这里填你的数据库密码" > F:\blog-solr\dih-encryptionkey(Windows下可用)

$ chown solr:solr F:\blog-solr\dih-encryptionkey(暂时没找到CMD命令)

$ chmod 600 F:\blog-solr\dih-encryptionkey(暂时没找到CMD命令)

使用-n参数避免在密码末尾包含换行字符。

  1. 使用openssl加密JDBC数据库密码(Windows下可用),如下所示:
echo -n "这里填你的数据库密码" | openssl enc -aes-128-cbc -a -salt -md md5 -pass file:F:\blog-solr\dih-encryptionkey

该命令的输出将是一个长字符串,例如:U2FsdGVkX18QMjY0yfCqlfBMvAB4d3XkwY96L7gfO2o=,在中使用这个作为密码,如下所示:

  <dataSource  
      driver="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost:3306/blog-20171206" 
      user="root" 
      password="U2FsdGVkX18QMjY0yfCqlfBMvAB4d3XkwY96L7gfO2o="/>

使用占位符替换请求参数

可以在配置中使用占位符替换请求参数,在solrconfig.xml中的<defaults>结点中定义这些参数,如下所示:

F:\blog-solr\article_core\conf\solrconfig.xml

  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name"jdbcurl">jdbc:mysql://localhost:3306/blog-20171206</str>
      <str name"jdbcuser">root</str>
      <str name"jdbcpassword">U2FsdGVkX18QMjY0yfCqlfBMvAB4d3XkwY96L7gfO2o=</str>
      <str name="config">database\mysql\database-mysql-conf.xml</str>
    </lst>
  </requestHandler>

F:\blog-solr\article_core\conf\database\mysql\blog-article-conf.xml

<dataSource driver="org.hsqldb.jdbcDriver"
            url="${dataimporter.request.jdbcurl}"
            user="${dataimporter.request.jdbcuser}"
            password="${dataimporter.request.jdbcpassword}" />

配置Schema

参考Solr Field TypesField Type Definitions and Properties

F:\blog-solr\article_core\conf\managed-schema

<schema>
  <fieldType name="cn_ik" class="solr.TextField">  // 1
    <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>  // 2
  </fieldType>
  <field name="articleTitle" type="cn_ik" indexed="true" stored="true"/>
  <field name="articleContent" type="cn_ik" indexed="true" stored="true"/>
</schema>
  1. 定义类型名称,实现类的名称。
  2. 有关字段分析的,详情查看Understanding Analyzers, Tokenizers, and Filters

重启Solr服务器:solr restart -p 8983 -s F:\blog-solr

选择article_core–>Dataimport

Command中选择full-import,勾选CleanCommit

Entity选择blogArticle

点击Execute按钮,开始导入数据,点击reload图标,出现绿色的如下的信息就表示成功导入数据建立索引了。

Last Update: 21:18:40

Indexing completed. Added/Updated: 6 documents. Deleted 0 documents. (Duration: 02s)
Requests: 1 1/s, Fetched: 6 3/s, Skipped: 0 , Processed: 6 3/s
Started: less than a minute ago

成功后在F:\blog-solr\article_core\conf目录下会新建一个dataimport.properties文件,里面是索引建立时间。

查询

选择article_core–>Query

点击Execute Query按钮,查询。

前提是数据库中有数据,如果数据库中有数据,而查询没数据,可能是导入数据中的步骤出了问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值