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命令。使用此命令,您可以将 JSON、XML、CSV 等各种格式的文件索引到 Apache Solr 中。

浏览 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\n1,0.47'

示例

假设我们有一个名为sample.csv的文件,其内容如下(在bin目录中)。

学生 ID 名字 姓氏 电话 城市
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的 Core 中:

[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv 

执行上述命令后,给定的文档将被索引到指定的 Core 中,并生成以下输出。

/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 https://127.0.0.1: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 
https://127.0.0.1:8983/Solr/Solr_sample/update... 
Time spent: 0:00:00.228

使用以下 URL 访问 Solr Web UI 的主页:

https://127.0.0.1:8983/

选择 Core Solr_sample。默认情况下,请求处理程序为/select,查询为“:”。无需进行任何修改,点击页面底部的ExecuteQuery按钮。

Solr Sample

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

CSV Document

注意 - 同样,您可以索引其他文件格式,例如 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 界面:

https://127.0.0.1:8983/

步骤 2

选择 Core Solr_sample。默认情况下,字段“请求处理程序”、“常用范围”、“覆盖”和“提升”的值分别为 /update、1000、true 和 1.0,如下面的屏幕截图所示。

Request Handler

现在,从 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 { 
      //Preparing the Solr client 
      String urlString = "https://127.0.0.1:8983/Solr/my_core"; 
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();   
      
      //Preparing the Solr document 
      SolrInputDocument doc = new SolrInputDocument(); 
   
      //Adding fields to the document 
      doc.addField("id", "003"); 
      doc.addField("name", "Rajaman"); 
      doc.addField("age","34"); 
      doc.addField("addr","vishakapatnam"); 
         
      //Adding the document to Solr 
      Solr.add(doc);         
         
      //Saving the changes 
      Solr.commit(); 
      System.out.println("Documents added"); 
   } 
}

通过在终端中执行以下命令来编译上述代码:

[Hadoop@localhost bin]$ javac AddingDocument 
[Hadoop@localhost bin]$ java AddingDocument 

执行上述命令后,您将获得以下输出。

Documents added
广告