Solr多值示例
本文英文版地址:https://examples.javacodegeeks.com/enterprise-java/apache-solr/solr-multivalued-example/
在这个Solr多值示例的示例中,我们将讨论如何索引包含多个值的字段,并演示如何检索它们。Solr存储单个值字段和多个值字段的索引值的方式没有区别。 但是,虽然从存储中检索多值字段,我们将获得结果作为列表,需要解析以显示多个值。
为了演示多值特性,我们将使用Solr服务器附带的示例文件“books.json”。
这个例子的首选环境是solr-5.0.0。在开始Solr安装之前,请确保已安装JDK并已正确设置Java_Home。
1.安装Apache Solr
首先,让我们从以下位置下载最新版本的Apache Solr:
http://lucene.apache.org/solr/downloads.html
Apache Solr已经经历了从4.xx到5.0.0的各种更改,因此如果您有不同版本的Solr,则需要下载5.xx版本以遵循此示例。
下载Solr zip文件后,将其解压缩到文件夹中。 提取的文件夹将如下所示:
bin文件夹包含用于启动和停止服务器的脚本。 example文件夹包含几个示例文件。 我们将使用其中一个来演示Solr如何对数据进行索引。server文件夹包含用于写入所有Solr日志的logs文件夹。在索引期间检查日志中的任何错误将有所帮助。 服务器下的solr文件夹包含不同的集合或核心。 每个核/集合的配置和数据存储在相应的核/集合文件夹中。
Apache Solr附带了一个内置的Jetty服务器。 但在我们启动solr实例之前,我们必须验证JAVA_HOME是否在机器上设置。
我们可以使用命令行脚本启动服务器。 让我们从命令提示符转到bin目录并发出以下命令:
solr start
这将在默认端口8983下启动Solr服务器。
我们现在可以在浏览器中打开以下URL,并验证我们的Solr实例正在运行。 solr管理工具的具体细节超出了示例的范围。
http://localhost:8983/solr/
2.创建Solr核心
当Solr服务器在独立模式下启动时,配置称为核心,当在SolrCloud模式下启动时,配置称为集合。在这个例子中,我们将讨论独立的服务器和核心。 我们将暂停SolrCloud讨论以供日后使用。
首先,我们需要创建一个用于索引数据的Core。 Solr create命令有以下选项:
- -c <name> - 要创建的核心或集合的名称(必需)。
- -d <confdir> - 配置目录,在SolrCloud模式下有用。
- -n <configName> - 配置名称。 此默认值与核心或集合的名称相同。
- -p <port> - 要向其发送create命令的本地Solr实例的端口;默认情况下,脚本尝试通过查找正在运行的Solr实例来检测端口。
- -s <shards> - 将集合拆分为的分片数,默认值为1。
- -rf <replicas> - 集合中每个文档的副本数。默认值为1。
在本例中,我们将使用-c参数作为核心名称,使用-d参数作为配置目录。 对于所有其他参数,我们使用默认设置。
现在在命令窗口中导航solr-5.0.0\bin文件夹,并发出以下命令:
solr create -c jcg -d basic_configs
我们可以在命令窗口中看到以下输出。
1 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">Creating new core'jcg' using command:</span>使用命令创建新核心'jcg':</span> |
2 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">http://localhost:8983/solr/admin/cores?action=CREATE&name=jcg&instanceDir=jcg</span> http:// localhost:8983 / solr / admin / cores?action = CREATE&name = jcg&instanceDir = jcg</span> |
3 |
4 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">{</span> {</span> |
5 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">"responseHeader":{</span> “responseHeader”:{</span> |
6 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">"status":0,</span> “status”:0,</span> |
7 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">"QTime":663},</span> “QTime”:663},</span> |
8 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">"core":"jcg"}</span> “core”:“jcg”}</span> |
现在我们导航到以下URL,我们可以看到jcg core被填充在核心选择器中。 您还可以查看核心的统计信息。
http://localhost:8983/solr
3.配置“多值”字段
多值字段允许我们在同一个字段中存储多个值。 包含同一字段或copyField的用法的多个值的源数据将强制我们使用multiValued字段。 类似于单值字段配置,我们必须修改schema.xml文件以添加多值属性。 让我们导航到server\solr\jcg\conf文件夹,并执行以下配置。 在这里,我们已经使猫场多重价值。
schema.xml
1 | <spanclass="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><spanclass="google-src-text"style="direction: ltr; text-align: left"><uniqueKey>id</uniqueKey></span> <uniqueKey> id </ uniqueKey></span> |
2 | <spanclass="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><spanclass="google-src-text"style="direction: ltr; text-align: left"><!-- Added for Multi value example --></span> <! - 为多值示例添加 - ></span> |
3 | <spanclass="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><spanclass="google-src-text"style="direction: ltr; text-align: left"><fieldname="name"type="text_general"indexed="true"stored="true"/></span> <fieldname =“name”type =“text_general”indexed =“true”stored =“true”/></span> |
4 | <spanclass="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><spanclass="google-src-text"style="direction: ltr; text-align: left"><fieldname="cat"type="text_general"indexed="true"stored="true"multiValued="true"/></span> <fieldname =“cat”type =“text_general”indexed =“true”stored =“true”multiValued =“true”/></span> |
5 | <spanclass="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><spanclass="google-src-text"style="direction: ltr; text-align: left"><fieldname="price"type="tdouble"indexed="true"stored="true"/></span> <fieldname =“price”type =“tdouble”indexed =“true”stored =“true”/></span> |
6 | <spanclass="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><spanclass="google-src-text"style="direction: ltr; text-align: left"><fieldname="inStock"type="boolean"indexed="true"stored="true"/></span> <fieldname =“inStock”type =“boolean”indexed =“true”stored =“true”/></span> |
7 | <spanclass="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><spanclass="google-src-text"style="direction: ltr; text-align: left"><fieldname="author"type="text_general"indexed="true"stored="true"/></span> <fieldname =“author”type =“text_general”indexed =“true”stored =“true”/></span> |
- name - 在Solr中存储和引用的字段的名称(必需)。
- type - 在配置中定义的字段的数据类型(必需)。
- indexed - 属性值指定用于索引的字段,并且可以使用索引检索记录。将值设置为false将使该字段只存储,但不能查询。 (可选的)
- stored - 属性值指定字段存储并可在输出中返回。将此字段设置为false将使该字段仅编入索引,并且无法在输出中检索。 (可选的)
- multiValued - 如果为true,表示单个文档可能包含此字段类型的多个值。(可选的)
由于我们已经修改了配置,我们必须停止和启动服务器。 为此,我们需要通过命令行从bin目录发出以下命令:
solr stop -all
服务器将立即停止。 现在启动服务器通过命令行从bin目录发出以下命令:
solr start
4.索引数据文件
Apache Solr附带一个名为SimplePostTool的独立Java程序。 该程序打包到JAR中,安装在example\exampledocs文件夹下。
现在,我们导航到命令提示符中的example\exampledocs文件夹,并键入以下命令。您将看到一堆使用该工具的选项。
java -jar post.jar -h
使用格式一般如下
Usage: java [SystemProperties] -jar post.jar [-h|-] [<file|folder|url|arg>
[<file|folder|url|arg>...]]
正如我们之前所说,我们将索引solr安装中随附的“books.json”文件中的数据。 我们将在命令提示符中导航到solr-5.0.0\example\exampledocs并发出以下命令。
java -Dtype=application/json -Durl=http://localhost:8983/solr/jcg/update -jar post.jar books.json
这里使用的SystemProperties是:
- -Dtype - 数据文件的类型。
- -Durl - jcg核心的URL。
文件“books.json”现在将被索引,并且命令提示符将显示以下输出。
1 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">SimplePostTool version 5.0.0</span> SimplePostTool版本5.0.0</span> |
2 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">Posting files to [base] urlhttp://localhost:8983/solr/jcg/update using content-typeapplication/json...</span>将文件发布到[base] url http:// localhost:8983 / solr / jcg / update使用content-typeapplication / json ...</span> |
3 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">POSTingfile books.json to [base]</span>将文件books.json发布到[base]</span> |
4 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">1 files indexed.</span> 1个文件已索引。</span> |
5 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">COMMITting Solr index changes tohttp://localhost:8983/solr/jcg/update...</span>提交Solr索引更改为http:// localhost:8983 / solr / jcg / update ...</span> |
6 | <span class="notranslate"onmouseover="_tipon(this)"onmouseout="_tipoff()"><span class="google-src-text"style="direction: ltr; text-align: left">Time spent: 0:00:01.646</span>所用时间:0:00:01.646</span> |
5.查询数据
现在打开以下URL,您将看到cat字段有多个值。
http://localhost:8983/solr/jcg/select?q=*
我们还可以在multiValue字段上查询,就像我们对单值字段执行查询一样。 打开以下URL,结果集将给予具有精装选项的书。
http://localhost:8983/solr/jcg/select?q=cat:hardcover
6.下载模式文件
这是Solr Multivalue字段的示例。






浙公网安备 33010602011771号