簡體   English   中英

如何首次使用Solr模式

[英]How to approach Solr schema for the first time

我試圖了解什么是設計我的Solr模式的最佳方法。 是否有可能使用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年之間的圖書查詢合同是如何形成的。

謝謝。

solr不允許使用結構化對象。 如果要執行此操作,則必須定義實體。

例如,與數據導入請求處理程序一起傳遞

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

因此,您可以有一個實體用於書籍,一個實體用於作者

您還可以使用動力學字段

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM