📜  Apache Solr-索引数据

📅  最后修改于: 2020-12-02 05:45:47             🧑  作者: Mango


通常,索引是系统地安排文档或(其他实体)的。索引使用户可以定位文档中的信息。

  • 索引收集,解析和存储文档。

  • 进行索引可以提高查找所需文档时搜索查询的速度和性能。

在Apache Solr中建立索引

在Apache Solr中,我们可以索引(添加,删除,修改)各种文档格式,例如xml,csv,pdf等。我们可以通过几种方式向Solr索引添加数据。

在本章中,我们将讨论索引-

  • 使用Solr Web界面。
  • 使用任何客户端API,例如Java, Python等。
  • 使用发布工具

在本章中,我们将讨论如何使用各种界面(命令行,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  [OPTIONS]  
or post –help  
   collection name defaults to DEFAULT_SOLR_COLLECTION if not specified  
OPTIONS 
======= 
Solr options: 
   -url  (overrides collection, host, and port) 
   -host  (default: localhost) 
   -p or -port  (default: 8983) 
   -commit yes|no (default: yes)  

Web crawl options:  
   -recursive  (default: 1) 
   -delay  (default: 10)  

Directory crawl options: 
   -delay  (default: 0)  

stdin/args options: 
   -type  (default: application/xml)  

Other options: 
   -filetypes [,,...] (default:   
   xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,
   rtf,htm,html,txt,log) 
   -params " = [& = ...]" (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目录中)。

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按钮。

Solr样品

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

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 。默认情况下,“请求处理程序”,“公共内部”,“覆盖”和“ 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 { 
      //Preparing the Solr client 
      String urlString = "http://localhost: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