Apache Solr 简明教程

Apache Solr - Indexing Data

通常, indexing 是文档或(其他实体)的系统性排列。索引使用户能够在文档中找到信息。

  1. 索引收集、解析和存储文档。

  2. 进行索引是为了在查找所需文档时提高搜索查询的速度和性能。

Indexing in Apache Solr

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

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

  1. 使用 Solr Web 界面。

  2. 使用任何客户端 API,例如 Java、Python 等。

  3. Using the post tool.

在本章中,我们将讨论如何使用各种界面(命令行、Web 界面和 Java 客户端 API)将数据添加到 Apache Solr 的索引。

Adding Documents using Post Command

Solr 在其 bin/ 目录中有一个 post 命令。使用此命令,可以在 Apache Solr 中索引各种格式的文件,如 JSON、XML、CSV。

浏览 Apache Solr 的 bin 目录并执行 post 命令的 –h option ,如下面的代码块所示。

[Hadoop@localhost bin]$ cd $SOLR_HOME
[Hadoop@localhost bin]$ ./post -h

执行上述命令后,将获得 post command 的选项列表,如下所示。

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'

Example

假设我们有一个名为 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 主页 -

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

solr sample

在执行此查询后,可以看到已编入索引的 CSV 文档的内容(默认格式为 JSON),如下面的屏幕截图所示。

csv document

Note − 同样,您可以索引其他文件格式,例如 JSON、XML、CSV 等。

Adding Documents using the Solr Web Interface

您还可以使用 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",
   }
]

Step 1

使用以下 URL 打开 Solr Web 界面 -

Step 2

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

request handler

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

submit document

Adding Documents using 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