本文讲述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>
dataSource中内容是JDBC驱动程序的信息,其他允许的属性包括是否自动提交到Solr、JDBC连接中使用的批处理大小和readOnly只读标志。- 如果数据库没有设置密码,则
password属性是可选的。或者,可以参考Encrypting a Database Password对密码进行加密。 document元素可以包含多个entity元素。entity元素可以嵌套。
加密数据库密码
openssl工具下载地址:点击下载
如何在Windows上安装openssl:How To Install OpenSSL on Windows
- 使用
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参数避免在密码末尾包含换行字符。
- 使用
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 Types和Field 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>
- 定义类型名称,实现类的名称。
- 有关字段分析的,详情查看Understanding Analyzers, Tokenizers, and Filters
重启Solr服务器:solr restart -p 8983 -s F:\blog-solr。
选择article_core–>Dataimport。
Command中选择full-import,勾选Clean,Commit。
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按钮,查询。
前提是数据库中有数据,如果数据库中有数据,而查询没数据,可能是导入数据中的步骤出了问题。
本文详细介绍了Apache Solr 8.5.1的单机部署过程,包括创建Solr Home目录、启动及配置Solr服务器、创建Core、导入数据并配置DataImportHandler(DIH)从JDBC数据库导入数据,同时讲解了如何处理数据库密码加密和查询操作。

被折叠的 条评论
为什么被折叠?



