Solr 部署与使用踩坑全记录

Solr 是一种可供企业使用的、基于 Lucene 的搜索服务器,它支持层面搜索、命中醒目显示和多种输出格式。在这篇文章中,将介绍 Solr 并展示如何轻松地将其表现优异的全文本搜索功能加入到 Web 应用程序中。

下载地址:https://lucene.apache.org/solr/downloads.html

本文中使用的Solr 版本:7.7.2,因为我是用的是 Windows 系统,所以主要介绍的是 Windows 下的部署方法。

安装

Solr 内置了 Jetty,所以不需要任何安装任何 Web 容器即可运行。直接通过命令行就可以启动。

启动 Solr:

.\solr.cmd start

停止 Solr:

.\solr.cmd stop -all 创建 Core

首先在 server\solr 文件夹中创建一个新的目录,然后将 server\solr\configsets\_default 下的 conf 目录复制到刚刚创建的文件夹。

在浏览器中打开 :8983/solr/ 点击左侧的 Core Admin 添加 Core。

Solr 部署与使用踩坑全记录

name 和 instanceDir 都改成刚刚创建的目录名称。

创建好之后即可在左侧的 Core Selector 中找到这个 Core。

现在一个 Core 就创建好了,在 Core 的面板里可以对其进行一些基本操作。

Solr 的 Api 是支持通过调用接口添加数据的,但是在实际使用中我们都是从数据库中同步数据,所以我们需要为 Solr 配置数据源。

Solr 部署与使用踩坑全记录

在 solrconfig.xml 文件中找到如下内容:

<!-- Request Handlers Incoming queries will be dispatched to a specific handler by name based on the path specified in the request. If a Request Handler is declared with startup="lazy", then it will not be initialized until the first request that uses it. -->

添加一个 requestHandler 节点:

<requestHandler> <lst> <str>data-config.xml</str> </lst> </requestHandler>

data-config.xml 文件的大致结构如下:

Solr 部署与使用踩坑全记录

稍后会对 data-config.xml 文件进行详细介绍。

配置数据源 使用 SQL Server 数据源

从微软官网下载 SQL Server 的 Microsoft SQL Server JDBC 驱动程序 4.1 驱动,复制到 server\solr-webapp\webapp\WEB-INF\lib 目录下。

这里需要注意的是把在下载的文件重命名为 sqljdbc4.jar,我之前没有改名死活加载不上。

使用 com.microsoft.sqlserver.jdbc.SQLServerDriver 驱动配置数据源:

<dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://127.0.0.1:1433;SelectMethod=Cursor;DatabaseName=post;useLOBs=false;loginTimeout=60" user="charlestest" password="12345678" /> 使用 MySQL 数据源

下载:mysql-connector-java-6.0.6.jar 复制到 server\solr-webapp\webapp\WEB-INF\lib 目录下。

从 dist 目录复制 solr-dataimporthandler-7.7.2.jar 到 server/solr-webapp/webapp/WEB-INF/lib 中。
配置 data-config.xml:

<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/posts?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC" user="root" password="12345678" batchSize="-1" /> <document> <entity dataSource="postData" pk="Id" transformer="DateFormatTransformer,HTMLStripTransformer" rootEntity="true" query="SELECT Id, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered, post_parent, guid, menu_order, post_type, post_mime_type, comment_count FROM wp_posts" deltaQuery="SELECT Id, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered, post_parent, guid, menu_order, post_type, post_mime_type, comment_count FROM wp_posts post_modified &gt;'${dataimporter.last_index_time}' " > <field column="Id" /> <field column="post_author" /> <field column="post_date" dateTimeFormat='yyyy-MM-dd HH:mm:ss'/> <field column="post_date_gmt" dateTimeFormat='yyyy-MM-dd HH:mm:ss'/> <field column="post_content" /> <field column="post_title" /> <field column="post_excerpt" /> <field column="post_status" /> <field column="comment_status" /> <field column="ping_status" /> <field column="post_password" /> <field column="post_name" /> <field column="to_ping" /> <field column="pinged" /> <field column="post_modified" dateTimeFormat='yyyy-MM-dd HH:mm:ss'/> <field column="post_modified_gmt" dateTimeFormat='yyyy-MM-dd HH:mm:ss'/> <field column="post_content_filtered" /> <field column="post_parent" /> <field column="guid" /> <field column="menu_order" /> <field column="post_type" /> <field column="post_mime_type" /> <field column="comment_count" /> <entity dataSource="authordata" pk="Id" query="SELECT Id, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name FROM wp_users where id=${Post.post_author}"> <field column="Id" /> <field column="user_login"/> <field column="user_pass"/> <field column="user_nicename"/> <field column="user_email"/> <field column="user_url"/> <field column="user_registered"/> <field column="user_activation_key"/> <field column="user_status"/> <field column="display_name"/> </entity> </entity> </document> </dataConfig>

entity 中的一些常用属性:

query:查询只对第一次全量导入有作用,对增量同步不起作用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgjpw.html