2013-07-30 31 views
0

我想了解什麼是設計Solr架構的最佳方法。並且如果有可能以一種不太複雜的方式使用solrJ來完成。
我目前正在與solr的示例服務器合作,所以我可以理解solr如何工作。 如果我理解正確的,到目前爲止,確定了以下模式的方式:如何首次實現Solr架構

Book= { title: String, 
     year: Int } 

Author = { name: String, 
      books: [book] } <-- list/array of book objects 

是使用CopyFields:

<fields> 
    <field name="name" type="string" indexed="true" stored="true" multiValued="false"/> 
    <field name="books" type="string" indexed="true" stored="false" multiValued="false"/> 
    <!-- books will contain: --> 
    <field name="title" type="string" indexed="true" stored="true" multiValued="true"/> 
    <field name="year" type="int" indexed="true" stored="true"/> 
</fields> 
<copyField source="title" dest="books"/> 
<copyField source="year" dest="books"/> 

是我糾正? 如果是這樣,我如何上傳一個新的作者到我的數據庫? 我試着上傳使用Solr的客戶端構成了我的node.js服務器:

function ADDONE(){ 
    var docs = []; 
    //generate 4 docs. 
    for(var i = 0; i <= 4 ; i++){ 
     var doc = { 
      id : 20 + i , 
      name : "Author"+i , 
      books: [{title: "firstBook" , year: 1900+i} , 
        {title: "SecondBook" , year: 1901+i} ] 

     } 
     docs.push(doc); 
    } 
    // Add documents to Solr 
    client.add(docs,function(err,obj){ 
     if(err){ 
      console.log(err); 
     }else{ 
      console.log(obj); 
     } 
    }); 

} 
ADDONE(); 

但是,這是行不通的。什麼是定義每個文檔的正確方法?我甚至關閉? 我給的例子是爲node.js solr-client編寫的,但我更喜歡使用Java,它是solr Client(solrJ?)。

我也想知道合同如何書籍查詢形成年1900年至1910年

感謝。

回答

0

,你也可以使用動態域

<fields> 
    <field name="name" type="string" indexed="true" stored="true" multiValued="false"/> 
    <field name="books" type="string" indexed="true" stored="false" multiValued="false"/> 
    <dynamicField name="books_year_*" type="string" indexed="true" stored="true" multiValued="false"/> 
    <dynamicField name="books_title_*" type="string" indexed="true" stored="true" multiValued="false"/> 
    <field name="book_title" type="string" indexed="true" stored="true" multiValued="true"/> 
    <copyField source="books_title_*" dest="book_title"/> 
    <field name="book_year" type="string" indexed="true" stored="true" multiValued="true"/> 
    <copyField source="books_year_*" dest="book_year"/> 

</fields> 

並與您的方法,

books: [{title: "firstBook" , year: 1900+i} => 
"books_title_"+i : firstBook 
"books_year_"+i : 1900+i 

查詢:

select?q=book_year:"1970" 
+0

聽起來不錯,你能給我一個例子,說明如何查詢所有擁有某年範圍書籍的作者,所以我會理解如何使用它? (任何一般示例都可以) – Roy

+0

加入: ' ' and query: 'select?q = book_year:」1910「' –