Apache Solr - 索引数据
一般来说,索引是对文档或(其他实体)进行系统排列。索引使用户能够在文档中定位信息。
索引收集、解析和存储文档。
索引是为了在查找所需文档时提高搜索查询的速度和性能。
Apache Solr 中的索引
在 Apache Solr 中,我们可以索引(添加、删除、修改)各种文档格式,如 xml、csv、pdf 等。我们可以通过多种方式将数据添加到 Solr 索引中。
在本章中,我们将讨论索引 −
- 使用 Solr Web 界面。
- 使用任何客户端 API,如 Java、Python 等。
- 使用 post 工具。
在本章中章节中,我们将讨论如何使用各种接口(命令行、Web 界面和 Java 客户端 API)将数据添加到 Apache Solr 的索引中。
使用 Post 命令添加文档
Solr 在其 bin/ 目录中有一个 post 命令。使用此命令,您可以在 Apache Solr 中索引各种格式的文件,例如 JSON、XML、CSV。
浏览 Apache Solr 的 bin 目录并执行 post 命令的 –h 选项,如以下代码块所示。
[Hadoop@localhost bin]$ cd $SOLR_HOME [Hadoop@localhost bin]$ ./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) Examples: * JSON file:./post -c wizbang events.json * XML files: ./post -c records article*.xml * CSV file: ./post -c signals LATEST-signals.csv * Directory of files: ./post -c myfiles ~/Documents * Web crawl: ./post -c gettingstarted http://lucene.apache.org/Solr -recursive 1 -delay 1 * Standard input (stdin): echo '{commit: {}}' | ./post -c my_collection - type application/json -out yes –d * Data as string: ./post -c signals -type text/csv -out yes -d $'id,value 1,0.47'
示例
假设我们有一个名为 sample.csv 的文件,其内容如下(在 bin 目录中)。
Student ID | First Name | Lasst Name | Phone | City |
---|---|---|---|---|
001 | Rajiv | Reddy | 9848022337 | Hyderabad |
002 | Siddharth | Bhattacharya | 9848022338 | Kolkata |
003 | Rajesh | Khanna | 9848022339 | Delhi |
004 | Preethi | Agarwal | 9848022330 | Pune |
005 | Trupthi | Mohanty | 9848022336 | Bhubaneshwar |
006 | Archana | Mishra | 9848022335 | Chennai |
上述数据集包含学生 ID、名字、姓氏、电话和城市等个人信息。数据集的 CSV 文件如下所示。在这里,您必须注意,您需要提及架构,记录其第一行。
id, first_name, last_name, phone_no, location 001, Pruthvi, Reddy, 9848022337, Hyderabad 002, kasyap, Sastry, 9848022338, Vishakapatnam 003, Rajesh, Khanna, 9848022339, Delhi 004, Preethi, Agarwal, 9848022330, Pune 005, Trupthi, Mohanty, 9848022336, Bhubaneshwar 006, Archana, Mishra, 9848022335, Chennai
您可以使用 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 UI 主页 −
http://localhost:8983/
选择核心 Solr_sample。默认情况下,请求处理程序为 /select,查询为":"。不做任何修改,单击页面底部的 ExecuteQuery 按钮。

执行查询时,您可以观察 JSON 格式(默认)的索引 CSV 文档的内容,如以下屏幕截图所示。

注意 −用同样的方式,您可以索引其他文件格式,例如 JSON、XML、CSV 等。
使用 Solr Web 界面添加文档
您还可以使用 Solr 提供的 Web 界面索引文档。让我们看看如何索引以下 JSON 文档。
[ { "id" : "001", "name" : "Ram", "age" : 53, "Designation" : "Manager", "Location" : "Hyderabad", }, { "id" : "002", "name" : "Robert", "age" : 43, "Designation" : "SR.Programmer", "Location" : "Chennai", }, { "id" : "003", "name" : "Rahim", "age" : 25, "Designation" : "JR.Programmer", "Location" : "Delhi", } ]
步骤 1
使用以下 URL − 打开 Solr Web 界面
http://localhost:8983/
步骤 2
选择核心 Solr_sample。默认情况下,字段 Request Handler、Common Within、Overwrite 和 Boost 的值分别为 /update、1000、true 和 1.0,如以下屏幕截图所示。

现在,从 JSON、CSV、XML 等中选择所需的文档格式。在文本区域中键入要索引的文档,然后单击 Submit Document 按钮,如以下屏幕截图所示。

使用 Java 客户端 API 添加文档
以下是将文档添加到 Apache Solr 索引的 Java 程序。将此代码保存在名为 AddingDocument.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 { //准备 Solr 客户端 String urlString = "http://localhost:8983/Solr/my_core"; SolrClient Solr = new HttpSolrClient.Builder(urlString).build(); //准备 Solr 文档 SolrInputDocument doc = new SolrInputDocument(); //向文档添加字段 doc.addField("id", "003"); doc.addField("name", "Rajaman"); doc.addField("age","34"); doc.addField("addr","vishakapatnam"); //将文档添加到 Solr Solr.add(doc); //保存更改 Solr.commit(); System.out.println("Documents added"); } }
通过在终端中执行以下命令来编译上述代码 −
[Hadoop@localhost bin]$ javac AddingDocument [Hadoop@localhost bin]$ java AddingDocument
执行上述命令后,您将获得以下输出。
Documents added