一般來說,索引是系統地排列文件或(其他實體)。索引使使用者能夠在文件中快速地查詢資訊。
在Apache Solr中,我們可以索引(新增,刪除,修改)各種文件格式,如xml,csv,pdf等。可以通過幾種方式向Solr索引新增資料。
在本章中,將討論建立索引的幾個方法 -
在本章中,將討論如何使用各種介面(命令列,Web介面和Java用戶端API)向Apache Solr的索引新增資料,
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按鈕。
在執行查詢時,可以以JSON格式(預設)觀察索引的CSV文件的內容,如下面的螢幕截圖所示。
注意 - 以相同的方式,可以索引其他檔案格式,如JSON,XML,CSV等。
還可以使用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",
}
]
使用以下URL開啟Solr Web介面 -
選擇核心Solr_sample
。 預設情況下,Request Handler
,Common Within
,Overwrite
和Boost
欄位的值分別為/update
,1000
,true
和1.0
,如下面的螢幕截圖所示。
現在,從JSON,CSV,XML等中選擇所需的文件格式。在文字區域中鍵入要索引的文件,然後單擊提交文件按鈕,如下面的螢幕截圖所示。
以下是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