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\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 。默认情况下,Request Handler,Common Within,Overwrite和Boost字段的值分别为/ update,1000,true和1.0,如以下屏幕截图所示。

请求处理程序

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

提交文件

使用Java Client 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