Solr索引數據

一般來說,索引是系統地排列文檔或(其他實體)。索引使用戶能夠在文檔中快速地查找信息。

  • 索引集合,解析和存儲文檔。
  • 索引是爲了在查找所需文檔時提高搜索查詢的速度和性能。

在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選項,如以下代碼塊所示。

yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ cd $SOLR_HOME 
yiibai@ubuntu:/usr/local/solr-6.4.0/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,名字,姓氏,電話和城市。數據集的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命令在名稱爲Solr_sample的核心下,對此數據編制索引,如下所示:

yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ ./post -c solr_sample sample.csv

在執行上述命令時,給定文檔在指定的核心下會生成索引,生成以下輸出。

yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ ./post -c solr_sample sample.csv
/usr/local/jdk1.8.0_65/bin/java -classpath /usr/local/solr-6.4.0/dist/solr-core-6.4.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.663

訪問Solr Web UI的主頁使用以下URL -

選擇核心Solr_sample。 默認情況下,請求處理程序是/select,查詢爲「」。 不做任何修改,單擊頁面底部的ExecuteQuery按鈕。

Solr索引數據

在執行查詢時,可以以JSON格式(默認)觀察索引的CSV文檔的內容,如下面的屏幕截圖所示。

Solr索引數據

注意 - 以相同的方式,可以索引其他文件格式,如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界面 -

第2步

選擇核心Solr_sample。 默認情況下,Request HandlerCommon WithinOverwriteBoost字段的值分別爲/update1000true1.0,如下面的屏幕截圖所示。
Solr索引數據

現在,從JSON,CSV,XML等中選擇所需的文檔格式。在文本區域中鍵入要索引的文檔,然後單擊提交文檔按鈕,如下面的屏幕截圖所示。
Solr索引數據

使用Java Client API添加文檔

以下是Java程序向Apache Solr索引添加文檔代碼。將代碼保存在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"); 
   } 
}

通過在終端中執行以下命令編譯上述代碼 -


yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ javac AddingDocument.java
yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ java AddingDocument

執行上述命令後,將得到以下輸出。

Documents added