练习 3:索引您自己的数据
练习 3:索引您自己的数据
对于本练习,请使用您选择的数据集。这可以是您本地硬盘驱动器上的文件、您之前使用过的一组数据,或者您打算索引到 Solr 以用于生产应用程序的数据样本。
本练习旨在让您思考您的应用程序需要做什么
-
您需要索引哪些类型的数据?
-
您需要做些什么来为您的数据准备 Solr(例如,创建特定字段、设置复制字段、确定分析规则等)
-
您希望为用户提供哪些类型的搜索选项?
-
您需要进行多少测试才能确保一切按预期工作?
创建您自己的集合
在开始之前,创建一个新的集合,并根据您的喜好命名。在此示例中,集合将命名为“localDocs”;如果您愿意,请将该名称替换为您选择的任何名称。
$ bin/solr create -c localDocs -s 2 -rf 2
同样,正如我们在上面的练习 2 中看到的那样,这将使用 _default
configset 及其提供的所有无模式功能。正如我们之前指出的那样,当我们索引数据时,这可能会导致问题。您可能需要多次迭代索引才能获得正确的模式。
索引思路
Solr 有很多索引数据的方法。选择以下方法之一并在您的系统上尝试一下
- 使用
bin/solr post
的本地文件 -
如果您有一个本地文件目录,Post 工具 (
bin/solr post
) 可以索引一个文件目录。我们在第一个练习中看到了它的实际操作。在我们的练习中,我们只使用了 JSON、XML 和 CSV,但 Post Tool 也可以处理 HTML、PDF、Microsoft Office 格式(如 MS Word)、纯文本等。
在此示例中,假设本地存在一个名为“Documents”的目录。要为其建立索引,我们将发出如下命令(根据需要更正
-c
参数后的集合名称):$ bin/solr post -c localDocs ~/Documents
在处理文档时,您可能会遇到错误。这些错误可能是由字段猜测引起的,或者可能不支持该文件类型。索引此类内容说明了为您的数据规划 Solr 的必要性,这需要您了解数据,或许还需要进行一些试错。
- SolrJ
-
SolrJ 是一个基于 Java 的客户端,用于与 Solr 交互。对于基于 JVM 的语言,请使用 SolrJ,或者使用其他 客户端 API 以编程方式创建要发送到 Solr 的文档。
- 文档屏幕
-
使用管理界面中的文档屏幕(位于 https://127.0.0.1:8983/solr/#/localDocs/documents),粘贴要建立索引的文档,或从
文档类型
下拉列表中选择文档构建器
,逐个字段构建文档。单击表单下方的提交文档按钮,即可索引您的文档。
更新数据
您可能会注意到,即使您多次在本教程中索引内容,也不会出现重复的结果。这是因为示例 Solr 模式(一个名为 managed-schema.xml
或 schema.xml
的文件)指定了一个名为 id
的 uniqueKey
字段。每当您向 Solr 发送 POST 命令以添加与现有文档具有相同 uniqueKey
值的文档时,它会自动替换该文档。
您可以通过查看 Solr 管理界面中特定核心的“概览”部分中 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>"
要删除所有文档,可以使用“按查询删除”命令,例如:
$ bin/solr post -c localDocs -d "<delete><query>*:*</query></delete>"
您还可以修改上述命令,仅删除与特定查询匹配的文档。