將文件傳送給Solr服務(wù)器

用post.jar將XML或JSON文件傳送到Solr服務(wù)器

在Solr中對XML和JSON文件的方式非常簡單,直接用post.jar就可以了,但是這些文件需要符合一定的格式,如:
  XML文檔

要添加的xml文檔示例

文檔需要用<add>標簽包圍起來,告訴Solr需要添加這個文檔到索引中。文檔的內(nèi)容被包裹在<doc>標簽里面,上面示例的文檔為了能使用shema.xml中的Dynamic Field解析,給每個field都添加了后綴。
  將上面的XML文檔添加到Solr中只需要執(zhí)行java -jar post.jar fileName.xml即可。

JSON文檔

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服務(wù)器進行連接。
  一個使用SolrJ將文件添加到solr服務(wù)器并執(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服務(wù)器,第二部分對Solr服務(wù)器中的所有文件搜索。
  將文件添加到Solr服務(wù)器:

創(chuàng)建SolrServer對象,指定Solr服務(wù)器地址;
  創(chuàng)建SolrInputDocument對象,創(chuàng)建兩個document;
  用SolrServer對象的add()方法將文件添加到Solr服務(wù)器,之后執(zhí)行commit方法,否則新的文件不會被檢索到。

搜索Solr服務(wù)器中的所有文件:

創(chuàng)建SolrQuery對象,指定查詢語句“:”;
  創(chuàng)建QueryResponse對象,接收查詢結(jié)果。

從示例代碼可以看出,通過SolrJ接口可以很容易的實現(xiàn)與Solr服務(wù)器的連接,文件的添加,查詢,以及接收返回的結(jié)果。

Data Import Handler(DIH)

DIH是Solr對外部數(shù)據(jù)源,如網(wǎng)站或關(guān)系型數(shù)據(jù)庫的擴展。DIH支持Oracle、Postgres、MySQL或者MS SQL Server等。從高層次來說,你只需要提供數(shù)據(jù)庫的連接參數(shù)以及SQL查詢語句,DIH對數(shù)據(jù)庫進行查詢并將返回的結(jié)果轉(zhuǎn)換為document。

Nutch

Nutch是一個基于java的開源爬蟲,Nutch可以將web頁面爬下來并解析成Solr可以檢索的格式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評論 19 139
  • 我發(fā)現(xiàn)我現(xiàn)在可真的是挺能白話。別人白話用嘴。我們平時一說這個人能白話,用的最形象的話就是:此人說起話來那是口若懸...
    六瓣丁香閱讀 311評論 0 0
  • 畢業(yè)了兩年,第一次失業(yè)了,學的計算機,女,92年出生,想從web前端轉(zhuǎn)行,在求職的一周內(nèi),每天至少面試兩家,終于體...
    limpid戀空閱讀 275評論 2 0
  • 夜是星的海。這句話是我寫的。 記不得有多長時間,自己沒有這么的“文藝”了。仿佛是從暑假在家開始,自己便沒有在兩點之...
    小坤坤萌萌噠閱讀 296評論 0 1

友情鏈接更多精彩內(nèi)容