如何第一次处理Solr架构

时间:2013-07-30 13:19:14

标签: node.js solr solrj solr4

我试图了解设计Solr Schema的最佳方法是什么。并且如果有可能使用solrJ以不太复杂的方式进行 我目前正在使用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-client上传我的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年间书籍查询的合同是如何形成的。

感谢。

2 个答案:

答案 0 :(得分:0)

solr不允许结构化对象。 如果要执行此操作,则必须定义实体。

例如,传递数据导入请求处理程序

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

所以你可以有一个实体用于书籍,一个实体用于作者

答案 1 :(得分: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"
相关问题