用post.jar將XML或JSON文件傳送到Solr服務器
在Solr中對XML和JSON文件的方式非常簡單,直接用post.jar就可以了酥宴,但是這些文件需要符合一定的格式纲辽,如:
XML文檔
文檔需要用<add>標簽包圍起來颜武,告訴Solr需要添加這個文檔到索引中。文檔的內容被包裹在<doc>標簽里面拖吼,上面示例的文檔為了能使用shema.xml中的Dynamic Field解析鳞上,給每個field都添加了后綴。
將上面的XML文檔添加到Solr中只需要執(zhí)行java -jar post.jar fileName.xml即可吊档。
JSON文檔
每一個需要創(chuàng)建索引的文檔都是一個JSON對象篙议,但是將JSON文件發(fā)送給Solr的時候需要執(zhí)行的語句為:java -Dtype=application/json -jar post.jar fileName.json
在-jar之前需要告訴solr這個是一個什么格式的文件。查看post.jar支持的選項怠硼,可以運行java -jar post.jar --help.
SolrJ
SolrJ是一個基于java的client library鬼贱,可以用來與Solr服務器進行連接。
一個使用SolrJ將文件添加到solr服務器并執(zhí)行搜索所有文件的例子:
public class ExampleSolrJClient {
public static void main(String[] args) throws Exception {
String serverUrl = (args != null && args.length > 0) ? args[0] : "http://localhost:8983/solr/collection1";
SolrServer solr = new HttpSolrServer(serverUrl);
SolrInputDocument doc1 = new SolrInputDocument();
doc1.setField("id", "1");
doc1.setField("screen_name_s", "@thelabdude");
doc1.setField("type_s", "post");
doc1.setField("lang_s", "en");
doc1.setField("timestamp_tdt", "2012-05-22T09:30:22Z/HOUR");
doc1.setField("favorites_count_ti", "10");
doc1.setField("text_t", "#Yummm :) Drinking a latte " + "at Caffe Grecco in SF's historic North Beach... "
+ "Learning text analysis with#SolrInAction " + "by @ManningBooks on my i-Pad");
solr.add(doc1);
SolrInputDocument doc2 = new SolrInputDocument();
doc2.setField("id", "2");
doc2.setField("screen_name_s", "@thelabdude");
doc2.setField("type_s", "post");
doc2.setField("lang_s", "en");
doc2.setField("timestamp_tdt", "2012-05-22T09:30:22Z/HOUR");
doc2.setField("favorites_count_ti", "10");
doc2.setField("text_t",
"Just downloaded the ebook of " + "#SolrInAction from @ManningBooks http://bit.ly/T3eGYG "
+ "to learn more about #Solr http://bit.ly/3ynriE");
doc2.addField("link_ss", "http://manning.com/grainger/");
doc2.addField("link_ss", "http://lucene.apache.org/solr/");
solr.add(doc2);
solr.commit(true, true);
for (SolrDocument next : simpleSolrQuery(solr, "*:*", 10)) {
prettyPrint(System.out, next);
}
}
static SolrDocumentList simpleSolrQuery(SolrServer solr, String query, int rows) throws SolrServerException {
SolrQuery solrQuery = new SolrQuery(query);
solrQuery.setRows(rows);
QueryResponse resp = solr.query(solrQuery);
SolrDocumentList hits = resp.getResults();
return hits;
}
static void prettyPrint(PrintStream out, SolrDocument doc) {
List<String> sortedFieldNames = new ArrayList<String>(doc.getFieldNames());
Collections.sort(sortedFieldNames);
out.println();
for (String field : sortedFieldNames) {
out.println(String.format("\t%s: %s", field, doc.getFieldValue(field)));
}
out.println();
}
}
上面的示例代碼分為兩個部分香璃,第一部分將文件添加到Solr服務器这难,第二部分對Solr服務器中的所有文件搜索。
將文件添加到Solr服務器:
創(chuàng)建SolrServer對象葡秒,指定Solr服務器地址姻乓;
創(chuàng)建SolrInputDocument對象,創(chuàng)建兩個document眯牧;
用SolrServer對象的add()方法將文件添加到Solr服務器蹋岩,之后執(zhí)行commit方法,否則新的文件不會被檢索到学少。
搜索Solr服務器中的所有文件:
創(chuàng)建SolrQuery對象剪个,指定查詢語句“:”;
創(chuàng)建QueryResponse對象版确,接收查詢結果扣囊。
從示例代碼可以看出,通過SolrJ接口可以很容易的實現(xiàn)與Solr服務器的連接阀坏,文件的添加如暖,查詢,以及接收返回的結果忌堂。
Data Import Handler(DIH)
DIH是Solr對外部數(shù)據源盒至,如網站或關系型數(shù)據庫的擴展。DIH支持Oracle士修、Postgres枷遂、MySQL或者MS SQL Server等。從高層次來說棋嘲,你只需要提供數(shù)據庫的連接參數(shù)以及SQL查詢語句酒唉,DIH對數(shù)據庫進行查詢并將返回的結果轉換為document。
Nutch
Nutch是一個基于java的開源爬蟲沸移,Nutch可以將web頁面爬下來并解析成Solr可以檢索的格式痪伦。