Solr 索引基础教程文档
收录于 2023-04-20 00:10:05 · بالعربية · English · Español · हिंदीName · 日本語 · Русский язык · 中文繁體
Apache Solr索引
索引是以系统的方式管理文档或其他实体。为了在文档中定位信息,我们使用索引。
索引可用于收集、解析和存储文档。
当我们查找所需文档时,它可用于提高搜索查询的速度和性能。
Solr 索引过程概述
Apache Solr 中的索引过程分为三个基本任务:
将文档从其原生格式(例如 XML 或 JSON)转换为 Solr 支持的格式。
使用多个定义良好的 Solr 接口之一添加文档,例如 HTTP POST。
Apache Solr 可以配置为在编制索引时对文档中的文本应用转换。
下图提供了在 Solr 中索引文档的三个必要步骤的高级概述。
Solr 支持我们文档的不同索引格式,包括 JSON、XML 和 CSV。在上图中,我们选择了 XML,因为 XML 的自描述格式使其易于适应和理解。以下是示例,我们的推文使用 Solr XML 格式时的外观。
<add> <doc> <field name="id">1</field> <field name="screen_name">@thelabdude</field> <field name="type">post</field> <field name="timestamp">2012-05-22T09:30:22Z</field> <field name="lang">en</field> <field name="user_id">99991234567890</field> <field name="favorites_count">10</field> <field name="text">#Yummm :) Drinking Cappuccino Grecco in SF?s historic North Beach... Learning text analysis with #SolrInAction by @lidihuo on my i-Phone</field> </doc> </add>
如您所见,每个字段以 XML 格式显示,语法简单明了;我们只为所有字段定义了字段名称和值。我们没有注意到有关文本或文件类型分析的任何内容。这是因为我们在上图所示的 schema.xml 文档中定义了如何分析字段。众所周知,Solr 为其所有核心服务提供了一个基于 HTTP 的基本接口,包括文档更新服务用于添加和更新文档。在图的左上角,我们描述了使用 HTTP POST 将推文示例的 XML 发送到文档中的更新服务索尔。此外,我们将在本教程后面看到如何添加特定的文档类型,例如 JSON、CSV 和 XML。我们现在将了解可用于验证文档中所有字段内容的文档更新服务,然后调用文本分析过程。分析完所有字段后,生成的文本将添加到索引中,使文档可用于搜索。
schema.xml 文件定义任何文档的字段和字段类型。对于任何简单的应用程序,可能需要搜索字段及其类型。不过,它可用于对您的架构进行一些预先规划。
设计您的架构
在我们的示例中,搜索的微博应用程序将直接潜入并定义我们想要索引的文档。实际上,对于实际应用程序而言,此过程并不总是显而易见的,因此它有助于进行一些预先设计和规划工作。现在,我们将了解搜索应用程序的基本设计注意事项。具体来说,我们将学习回答关于我们的搜索软件的给定关键问题:
我们索引中的文档是什么?
如何唯一标识所有文档。
用户通常搜索我们文档中的哪些字段?
应该在搜索结果中向用户显示哪些字段?
让我们确定搜索应用程序中文档的适当粒度,这会影响您回答其他问题的方式。
使用 Post 命令添加文档
Solr 的 bin 目录里面,有一个 post 命令。我们可以在 Solr 中索引各种格式的文件,例如 CSV、JSON 和 XML。
我们可以浏览 Solr 的 bin 目录并运行 post 命令的-h 选项,如下所示代码块。
$ cd $SOLR_HOME $ ./post-h
当我们执行上面的命令时,我们会得到一个post命令的选项列表,如下图。
Usage: post-c <collection> [OPTIONS] <files|directories|urls|-d [".."]> or post ?help collection name defaults to DEFAULT_SOLR_COLLECTION if not specified OPTIONS ======= Solr options: -url <base Solr update URL> (overrides collection, host, and port) -host <host> (default: localhost) -p or-port <port> (default: 8983) -commit yes|no (default: yes) Web crawl options: -recursive <depth> (default: 1) -delay <seconds> (default: 10) Directory crawl options: -delay <seconds> (default: 0) stdin/args options: -type <content/type> (default: application/xml) Other options: -filetypes <type>[,<type>,...] (default: xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots, rtf,htm,html,txt,log) -params "<key> = <value>[&<key> = <value>...]" (values must be URL-encoded; these pass through to Solr update request) -out yes|no (default: no; yes outputs Solr response to console) -format Solr (sends application/json content as Solr commands to /update instead of /update/json/docs)
示例
让我们以一个名为 sample.csv 的文件为例,其中包含给定的内容(在 bin 目录中)。
学生证 | 名字 | 电话 | 城市 |
001 | Olivia | +148022337 | California |
002 | Emma | +148022338 | Hawaii |
003 | Sophia | +148022339 | Florida |
004 | Emily | +148022330 | Texas |
005 | Harper | +148022336 | Kansas |
006 | Scarlett | +148022335 | Kentucky |
上面的数据表包含个人详细信息,如学生 ID、名字、电话和城市名称。下面给出了数据文件的 CSV 文件。在这里,我们必须注意,您需要提及架构,记录其第一行。
id | 名字 | 电话号码 | 位置 |
001 | Olivia | +848022337 | Michigan |
002 | Emma | +848022338 | Minnesota |
003 | Sophia | +848022339 | North Carolina |
004 | Emily | +848022330 | Ohio |
005 | Harper | +848022336 | Oregon |
006 | Scarlett | +848022335 | Pennsylvania |
您可以使用下面给出的 post 命令在名为"sample_Solr"的核心中索引这些数据:
[Hadoop@localhost bin]$ ./post-c Solr_sample sample.csv
当我们执行上述命令时,给定的文档将在指定的核心下建立索引并生成给定的输出。
/home/Hadoop/java/bin/java-classpath /home/Hadoop/Solr/dist/Solr-core
6.2.0.jar-Dauto = yes-Dc = Solr_sample-Ddata = files
org.apache.Solr.util.SimplePostTool sample.csv
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/Solr/Solr_sample/update...
Entering auto mode. File endings considered are
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,
htm,html,txt,log
POSTing file sample.csv (text/csv) to [base]
1 files indexed.
COMMITting Solr index changes to
http://localhost:8983/Solr/Solr_sample/update...
Time spent: 0:00:00.228
使用给定的 URL 转到 Solr Web 用户界面的主页:
http://localhost:8983/
选择核心主页上的 Solr_sample。不做任何修改,点击页面底部的 ExecuteQuery 按钮。
当我们执行查询时,我们可以观察到默认格式(JSON) 索引的 CSV 文档的数据,如下面的屏幕截图所示。
注意: 注意-同样,我们可以索引不同的文件格式,如 XML、CSV、JSON 等。
使用 Solr Web 界面添加文档
您还可以使用 Solr 提供的 Web 界面索引文档。让我们看看如何索引以下 JSON 文档。
[ { "id" : "001", "name" : "Emma", "age" : 25, "Designation" : "Executive", "Location" : "Texas", }, { "id" : "002", "name" : "Robert", "age" : 43, "Designation" : "SR.Programmer", "Location" : "New York", }, { "id" : "003", "name" : "John", "age" : 25, "Designation" : "JR.Programmer", "Location" : "California", } ]
第 1 步: 使用给定的 URL 转到 Solr Web 界面-http://localhost:8983/
第 2 步: 选择核心"Solr_sample"。如下图所示,Request Handler、Common Within、Overwrite 和Boost 字段的值分别为/update、1000、true 和1.0。
步骤3: 最后,从 CSV、XML、JSON 等中选择您想要的文档格式。在文本区域下输入您想要索引的文档,然后单击"提交文档"按钮,如下面的屏幕截图所示。
使用 Java 客户端 API 添加文档
如您所见,以下是将文档添加到 Solr 索引的 Java 源代码。使用名称 AddDocument.java 保存此程序。
import java.io.IOException; import org.apache.Solr.client.Solrj.SolrClient; import org.apache.Solr.client.Solrj.SolrServerException; import org.apache.Solr.client.Solrj.impl.HttpSolrClient; import org.apache.Solr.common.SolrInputDocument; public class AddingDocument { public static void main(String args[]) throws Exception { //Prepare the Solr client String urlString = "http://localhost:8983/Solr/my_core"; SolrClient Solr = new HttpSolrClient.Builder(urlString).build(); //Prepare the Solr doc. SolrInputDocument doc = new SolrInputDocument(); //Add fields to the doc. doc.addField("id", "003"); doc.addField("name", "Rajaman"); doc.addField("age","34"); doc.addField("addr","vishakapatnam"); //Add the doc. to Solr Solr.add(doc); //Save the changes Solr.commit(); System.out.println("Documents added"); } }
以上代码在终端执行以下命令即可编译-
$ javac AddingDocument $ java AddingDocument
当我们运行上述命令时,我们将在显示器上收到以下输出。
输出:
已添加文档。