2013-10-01 33 views
3

檢索對象,因此,我有一個基於Java的web項目顯示從3個獨立的服務檢索到的信息,託管在不同的服務器上,我使用的Apache HTTP客戶端檢索通過REST API信息JSON,使用Gson庫。我將Json轉換爲POJO,用於顯示信息。從Solr的

現在我要實現我的項目的搜索功能,所以我一個單獨的服務器上安裝Solr的,我要的是:

  1. 指數JSON在Solr的服務器爲所有3個服務。在我的項目描述

我知道這點(1)可以通過jsonRequestHandler完成POJO的形式從Solr的

  • 獲取搜索結果,但我不想寫單獨的邏輯索引,我在我的項目中使用Solrj來提取信息。

    所以我想知道

    • 可以solrj用我的POJO定義解析搜索結果?
    • 還有以上工作場景的任何可能的工作流程,以及需要工具 (我是solrj的新手)?
  • 回答

    8

    映射Solr的

    一個POJO要做到這一點,你需要註釋的POJO的領域/接入的方法與org.apache.solr.client.solrj.beans.Field -Annotation。

    當然,這些字段需要通過名稱直接匹配schema.xml的字段,或者通過在字段註釋中指定名稱來指定Solr。

    作爲示例,您在模式中具有以下fields的定義。XML

    <fields> 
        <field name="id" type="int" indexed="true" stored="true" multiValued="false" /> 
        <field name="title" type="string" indexed="true" stored="true" multiValued="false" /> 
    </fields> 
    

    然後你會喜歡這個

    import org.apache.solr.client.solrj.beans.Field; 
    
    public class SampleDocument { 
    
        public SampleDocument() { 
         // required for solrj to make an instance 
        } 
    
        public SampleDocument(int id, String title) { 
         this.id = id; 
         this.title = title; 
        } 
    
        public String getTitle() { 
         return title; 
        } 
    
        @Field("title") 
        public void setTitle(String title) { 
         this.title = title; 
        } 
    
    } 
    

    一個POJO使用POJO更新Solr的指數

    代碼索引這些POJO的是相當直接的。你可以使用solrj的SolrServer來達到這個目的。

    // connect to your solr server 
    SolrServer server = new HttpSolrServer("http://HOST:8983/solr/"); 
    
    // adding a single document 
    SampleDocument document = new SampleDocument(1, "title 1"); 
    server.addBean(document); 
    
    // adding multiple documents 
    List<SampleDocument> documents = Arrays.asList(
         new SampleDocument(2, "title 2"), 
         new SampleDocument(3, "title 3")); 
    server.addBeans(documents); 
    
    // commit changes 
    server.commit(); 
    
    // query solr for something 
    QueryResponse response = server.query(new SolrQuery("*:*")); 
    // get the response as List of POJO type 
    List<SampleDocument> foundDocuments = response.getBeans(SampleDocument.class); 
    

    延伸閱讀

    的結果是我們的代碼寫起來,以下引用

    0

    是的,這是可能的,我曾經做過一些類似的事情。 但我認爲你應該寫一些轉換器,它會從SolrDocumentList中獲取結果,並從每個SolrDocument中將結果輸入到POJO中。

    閱讀有關設置查詢參數和獲得結果solrj,我認爲這對你來說不會有問題。轉換器本身應該易於編寫,因爲您可以訪問從結果中索引的每個字段。 還要注意縮小結果本身。

    這些是一些指南,因爲我對solr搜索沒有經驗。我不知道它會對你有多大幫助,但我希望如此。