作者 | 胡海超的博客
来源 | https://blog.csdn.net/u011936…
写在前面:本文涉及 solr 入门的各方面,请逐行阅读,相信能帮助你对 solr 有个清晰全面的了解并能简单实用。
在 Apache Solr 初学者教程的这个例子中,我们将讨论有关如何安装最新版本的 Apache Solr,并告诉你如何配置它。此外,我们将告诉你如何进行使用 solr 的样本数据文件索引。Apache Solr 支持不同格式,包括各种数据库,PDF 文件,XML 文件,CSV 文件等等。在这个例子中,我们将研究如何从一个 CSV 文件索引数据。
首选这个例子的环境是 Windows。开始 Solr 安装之前,确保你已经安装了 JDK 和正确配置 JAVA_HOME。
1. 为什么选择 Apache Solr
Apache Solr 是一个功能强大的搜索服务器,它支持 REST 风格 API。Solr 是基于 Lucene 的,Lucene 支持强大的匹配能力,如短语,通配符,连接,分组和更多不同的数据类型。它使用 Apache Zookeeper 特别针对高流量进行优化。Apache Solr 提供各式各样的功能,我们列出了部分最主要的功能。
1. 先进的全文搜索功能。2. XML,JSON 和 HTTP - 基于开放接口标准。3. 高度可扩展和容错。4. 同时支持模式和无模式配置。5. 分页搜索和过滤。6. 支持像英语,德语,中国,日本,法国和许多主要语言
7. 丰富的文档分析。
2. 安装 Apache Solr
要首先让从以下位置下载最新版本的 Apache Solr:
http://lucene.apache.org/solr…
在撰写本文时,可用的稳定版本是 5.0.0。Apache Solr 经历了从 4.XX 到 5.0.0 各种变化了,所以如果你有不同版本的 Solr,你需要下载 5.xx 版本并以此为模板。
一旦 Solr 的 zip 文件下载将它解压缩到一个文件夹。提取的文件夹看起来像下面。
Solr 的文件夹
bin 文件夹中包含用来启动和停止服务器的脚本。example 文件夹包含几个示例文件。我们将使用其中的一种,以说明 Solr 如何索引数据。server 文件夹包含 logs 文件夹,所有的 Solr 的日志都写入该文件夹。这将有助于索引过程来检查任何错误日志。在 sever 文件夹下的 Solr 文件夹包含不同的集合或核心(core/collection)。对于各集合或核心的配置和数据都存储在相应的集合或核心文件夹。
Apache Solr 带有一个内置的 Jetty 服务器。但在我们开始之前,我们必须验证 JAVA_HOME 已经配置。
我们可以使用命令行脚本启动服务器。让我们去 solr 的 bin 目录,从命令提示符输入出以下命令
solr start
这将启动下的默认端口 8983 Solr 的服务器。
现在,我们可以在浏览器中打开以下网址和验证,我们的 Solr 的实例正在运行。solr 的管理工具的细节超出了示例的范围。
http://localhost:8983/solr/
Solr 管理控制台
3. 配置 Apache Solr
在本节中,我们将告诉你如何配置的核心 / 集合作为 Solr 实例,以及如何定义的字段。Apache Solr 附带称为无模式模式的选项。这个选项允许用户构建有效的架构,而无需手动编辑模式文件。但是,在这个例子中,我们将使用架构配置理解 Solr 的内部。
3.1 建立核心(core)
当 Solr 的服务器在独立模式下启动的配置称为核心,当它在 SolrCloud 模式启动的配置称为集合。在这个例子中,我们将有关独立服务器和核心讨论。我们将在以后再讨论 SolrCloud。首先,我们需要创建一个核心的索引数据。Solr 的创建命令有以下选项:
-c <name> - 要创建的核心或集合的名称(必需)。-d <confdir> - 配置目录,在 SolrCloud 模式非常有用。-n <configName> - 配置名称。这将默认为核心或集合的名称。-p <port> - 本地 Solr 的实例的端口发送 create 命令; 默认脚本试图通过寻找运行 Solr 的实例来检测端口。-s <shards> -Number of shards to split a collection into, default is 1.
-rf <replicas> - 集合中的每个文件的份数。默认值是 1。
在这个例子中,我们将使用的核心名称和配置目录 - d 参数 - c 参数。对于所有其它参数我们使用默认设置。
现在在命令窗口浏览 solr-5.0.0bin 文件夹,并发出以下命令。
solr create -c jcg -d basic_configs
我们可以看到在命令窗口中下面的输出。
Creating new core ‘jcg’ using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=jcg&instanceDir=jcg
{
“responseHeader”:{
“status”:0,
“QTime”:663},
“core”:”jcg”}
现在我们导航到以下网址,我们可以看到 JCG 核心被填充在核心选择器上。还可以看到核心的统计信息。
http://localhost:8983/Solr
Solr 的核心 JCG
3.2 修改 Schema.xml 文件
我们需要修改 schema.xml 中文件的文件夹下,serversolrjcgconf 包含的字段。我们将使用随 Solr 的安装索引附带的示例文件“books.csv”之一。该文件所在的文件夹下 的 solr-5.0.0exampleexampledocs
现在,我们定位到该文件夹 serversolr 目录。你会看到一个名为 JCG 的文件夹被创建。子文件夹 conf 和 data 分别拥有核心的配置和索引的数据。
现在编辑 serversolrjcgconfserversolrjcgconfschema.xml 文件,设置唯一元素后添加以下内容。
schema.xml
<uniqueKey>id</uniqueKey>
<!-- Fields added for books.csv load-->
<field name="cat" type="text_general" indexed="true" stored="true"/>
<field name="name" type="text_general" indexed="true" stored="true"/>
<field name="price" type="tdouble" indexed="true" stored="true"/>
<field name="inStock" type="boolean" indexed="true" stored="true"/>
<field name="author" type="text_general" indexed="true" stored="true"/>
我们已经设置了属性索引为 true。这指定字段用于索引和记录可以使用索引进行检索。该值设置为 false 将只存储领域,但不能进行查询。
另外请注意另一个属性 stored 并将其设置为 true。这指定字段被存储,并且可以在输出被返回。将此字段设置为 false 使字段唯一索引,并且不能在输出进行检索。
我们已经分配给存在于此处的“books.csv”文件中的字段的类型。在 CSV 文件“ID”第一场由索引 Schema.xml 文件的唯一键自动元素的照顾。如果你注意,我们已经略过字段 series_t,sequence_i 和 genre_s 未做任何条目。但是,当我们执行索引时,所有这些字段都被索引且没有任何问题。如果你想知道这种情况需要在 Schema.xml 文件的 dynamicField 部分一探究竟。
schema.xml
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<dynamicField name="*_is" type="ints" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true" />
<dynamicField name="*_ss" type="strings" indexed="true" stored="true"/>
<dynamicField name="*_l" type="long" indexed="true" stored="true"/>
<dynamicField name="*_ls" type="longs" indexed="true" stored="true"/>
<dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>
<dynamicField name="*_txt" type="text_general" indexed="true" stored="true"/>
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
<dynamicField name="*_bs" type="booleans" indexed="true" stored="true"/>
<dynamicField name="*_f" type="float" indexed="true" stored="true"/>
<dynamicField name="*_fs" type="floats" indexed="true" stored="true"/>
<dynamicField name="*_d" type="double" indexed="true" stored="true"/>
<dynamicField name="*_ds" type="doubles" indexed="true" stored="true"/>
既然我们已经修改了配置,我们必须停止和启动服务器。要做到这一点,我们需要通过命令行发出从 bin 目录下面的命令。
Solr stop -all
服务器将停止现在。现在启动服务器问题从 bin 目录中通过命令行运行以下命令。
Solr start
4. 索引数据
Apache Solr 带有一个叫做 SimplePostTool 独立的 Java 程序。这个程序被打包成 JAR, 在安装目录下 exampleexampledocs 可看到。
现在,我们在命令行定位到 exampleexampledocs 文件夹,然后键入以下命令。你会看到一堆选项,使用的工具。
Java -jar post.jar -h
在一般的使用格式如下用途:
Usage: java [SystemProperties] -jar post.jar [-h|-] [<file|folder|url|arg>
[<file|folder|url|arg>…]]
正如我们前面所说,我们将索引“books.csv”文件中的数据。我们将导航到 solr-5.0.0exampleexampledocs 在命令提示符并发出以下命令。
java -Dtype=text/csv -Durl=http://localhost:8983/solr/jcg/update -jar post.jar books.csv
这里使用的 SystemProperties 是:
-dtype – 数据文件的类型。
-Durl – JCG 核心的地址。
文件“books.csv”现在将索引和命令提示符将显示以下输出。
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/jcg/update using content-
type text/csv…
POSTing file books.csv to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/jcg/update…
Time spent: 0:00:00.647
现在我们导航到以下网址并选择核心 JCG。
http://localhost:8983/solr
Solr 的 JCG 核心数据
就拿在统计部分仔细一看,该篇文档参数将显示索引的行数。
5. 访问索引的文档
Apache Solr 提供了一种基于 REST API 来访问的数据,并还提供了不同的参数,以检索数据。我们将向您展示一些基于场景的查询。
5.1 按名称搜索
我们将用它的名字检索书的细节。要做到这一点,我们将使用下面的语法。URL 中的参数“Q”是查询事件。
打开浏览器下列 URL。
http://localhost:8983/solr/jcg/select?q=name:”A Clash of Kings”
输出将在下面,如图所示。
按名称 SOLR
5.2 首字母搜索
现在我们将告诉你如何搜索记录,如果我们只知道起始字母或单词,不记得完整的标题。我们可以用下面的查询检索结果。
http://localhost:8983/solr/jcg/select?q=name:”A”
输出将列出所有的书籍字母 A 盯着
Solr 的首字母
5.3 搜索使用通配符
Solr 支持通配符搜索。我们将下面的展示如何检索所有书名包含“of”的书。
http://localhost:8983/solr/jcg/select?q=name:”*of”
Solr 的通配符搜索
5.4 搜索使用的条件
Solr 的支持条件的搜索。我们可以设置条件,我们的查询提供了“FQ”参数。在下面我们将告诉你如何查询价格低于¥6 的书。
http://localhost:8983/solr/jcg/select?q=*&fq=price:[0 TO 6]
输出将只列出低于 $ 6 的书籍。
Solr 搜索条件
6. Solr 的客户端 API 的
有不同的客户端 API 的可用来连接到 Solr 的服务器。我们列出了一些广泛使用的 Solr 客户端 API 的。
SolRuby – To connect from Ruby
SolPHP – To connect from PHP
PySolr – To connect from Python
SolPerl – To connect from Perl
SolrJ – To connect from Java
SolrSharp – To connect from C#
此外,Solr 还提供了 JavaScript 可以直接使用的基于 REST 的 API。
ps: 由于篇幅过长,部分段落使用翻译软件翻译,请谅解,但均已手动修改,不影响内容学习,有时间的同学也可阅读英文版。
参考地址:https://examples.javacodegeek…
如果文章对您有帮助,请记得点赞关注哟~
欢迎大家关注我的公众号 < 情系 IT>,每日推送技术文章供大家学习参考。