2013-07-30 3 views
0

Solr 스키마를 설계하는 가장 좋은 방법은 무엇인지 이해하려고합니다. solrJ를 사용하여 덜 복잡한 방법으로 수행 할 가능성이있는 경우.
현재 solr의 예제 서버로 작업 중이므로 solr의 작동 방식을 이해할 수 있습니다. 내가 지금까지 제대로 이해한다면, 다음 스키마 정의하는 방법 :Solr 스키마에 처음으로 접근하는 방법

<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"/> 

내가 수정했다 :

Book= { title: String, 
     year: Int } 

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

이 CopyFields를 사용하는 것입니다? 그렇다면 새로운 저자를 내 데이터베이스에 어떻게 업로드합니까? 은 내가 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

' ' 및 검색어 : 'select? q = book_year :"1910 "' –

0

solr는 구조화 된 객체를 허용하지 않습니다. 이렇게하려면 엔터티를 정의해야합니다. 데이터 가져 오기 요청 처리기로 전달 예를 들어

,

http://wiki.apache.org/solr/DataImportHandler#Full_Import_Example

그래서 당신은

+0

가장 쉬운 방법은 쌍 저장할 수 있다는 것입니다 문서 내에서 (키 값을)? – Roy

관련 문제