练习 3:索引您自己的数据
练习 3:索引您自己的数据
对于此最后一个练习,使用您选择的某个数据集。这可以是您本地硬盘上的文件、您之前处理过的一组数据,或者可能是您打算为您的生产应用程序索引到 Solr 中的数据样本。
此练习旨在让您思考您需要为您的应用程序做什么
-
您需要索引哪些类型的数据?
-
您需要对 Solr 执行哪些操作才能为您的数据做好准备(例如,创建特定字段、设置复制字段、确定分析规则等)
-
您希望为用户提供哪些类型的搜索选项?
-
您需要进行多少测试才能确保一切都按预期的方式工作?
创建您自己的集合
在开始之前,创建一个新集合,命名为任何您喜欢的名称。在此示例中,集合将命名为“localDocs”;如果您愿意,请将该名称替换为您选择的任何名称。
$ bin/solr create -c localDocs -s 2 -rf 2
同样,正如我们在上面的练习 2 中所看到的,这将使用 _default
配置集及其提供的所有无模式功能。正如我们之前提到的,当我们索引我们的数据时,这可能会导致问题。在获得正确的模式之前,您可能需要多次迭代索引。
索引思路
Solr 有很多索引数据的方法。选择以下方法之一,并使用您的系统试用
- 使用
bin/solr post
的本地文件 -
如果您有本地文件目录,则 Post 工具 (
bin/solr post
) 可以索引文件目录。我们在第一个练习中看到了这一点。我们在练习中只使用了 JSON、XML 和 CSV,但 Post 工具还可以处理 HTML、PDF、Microsoft Office 格式(例如 MS Word)、纯文本等。
在此示例中,假设本地有一个名为“Documents”的目录。若要对其编制索引,我们可以发出如下命令(根据需要更正
-c
参数后的集合名称)$ bin/solr post -c localDocs ~/Documents
在处理文档时,您可能会遇到错误。这些错误可能是由字段猜测引起的,或者文件类型可能不受支持。对诸如此类内容编制索引表明需要为您的数据规划 Solr,这需要理解数据,或许还需要进行一些反复试验。
- SolrJ
-
SolrJ 是用于与 Solr 交互的基于 Java 的客户端。对基于 JVM 的语言或其他 客户端 API 使用 SolrJ 以编程方式创建要发送到 Solr 的文档。
- 文档屏幕
-
使用 Admin UI 文档屏幕(位于 http://localhost:8983/solr/#/localDocs/documents)粘贴要编制索引的文档,或从
文档类型
下拉列表中选择文档生成器
以一次生成一个字段的文档。单击表单下方的提交文档按钮以编制文档的索引。
更新数据
您可能会注意到,即使您多次编制本教程中的内容索引,它也不会重复找到的结果。这是因为示例 Solr 架构(名为managed-schema.xml
或schema.xml
的文件)指定了一个名为id
的uniqueKey
字段。每当您将 POST 命令发布到 Solr 以添加具有与现有文档相同的uniqueKey
值的文档时,它会自动为您替换该文档。
您可以通过查看 Solr Admin UI 中特定于核心的概述部分中numDocs
和maxDoc
的值来了解是否发生了这种情况。
numDocs
表示索引中可搜索文档的数量(并且将大于 XML、JSON 或 CSV 文件的数量,因为某些文件包含多个文档)。maxDoc
值可能更大,因为maxDoc
计数包括尚未从索引中物理删除的逻辑删除文档。您可以反复重新发布示例文件,numDocs
绝不会增加,因为新文档将不断替换旧文档。
继续编辑任何现有的示例数据文件,更改一些数据,然后重新运行 PostTool(bin/solr post
)。您将在后续搜索中看到反映的更改。
删除数据
如果您需要反复多次才能获得正确的架构,您可能希望删除文档以清除集合并重试。但是,请注意,仅仅删除文档并不会更改底层字段定义。从本质上讲,这将允许您在对字段进行更改以满足您的需求后重新编制数据的索引。
您可以通过向更新 URL POST 删除命令并指定文档唯一键字段的值,或与多个文档匹配的查询(小心使用该查询!)来删除数据。如果我们正确地构建请求,我们还可以使用 bin/solr post
来删除文档。
执行以下命令以删除特定文档
$ bin/solr post -c localDocs -d "<delete><id>SP2514N</id></delete>"
要删除所有文档,您可以使用类似于以下内容的“delete-by-query”命令
$ bin/solr post -c localDocs -d "<delete><query>*:*</query></delete>"
您还可以修改上述命令,以仅删除与特定查询匹配的文档。