One solr instance has only one doc type. So you have many types, the first 
option is to use multiple solr server instance.

The second option is to use multiple core. In this case, you have one solr 
sever instance but in the server instance you have more than one core.

If you don't want to use multiple server instance or multiple core, the third 
option is to use the dynamic field. Here is my approach. In the schema, I 
define all dynamic fields I need. It covers all of my cases. Its format is 
*_DATATYPE_INDEXED_STORED_MULTIPLEVALUE. 

DATATYPE = Integer | Float | Double | String | Text | DaTe | Long. The short 
versons are "i f d s t dt"
INDEXED: i -- yes, it's indexed; ni -- no, it's not indexed
STORED: s -- yes, it's stored; ns -- no, it's not stored
MULTIPLEVALUE: m -- yes, this field has multi-values; nm -- no, this field has 
single value.

My list of dynamic fields.


<dynamicField name="*_i_i_s_m"  type="integer"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_i_i_s_nm"  type="integer"    indexed="true"  
stored="true" multiValued="false"/>
<dynamicField name="*_i_i_ns_m"  type="integer"    indexed="true"  
stored="false" multiValued="true"/>
<dynamicField name="*_i_i_ns_nm"  type="integer"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_i_ni_s_m"  type="integer"    indexed="false"  
stored="true" multiValued="true"/>
<dynamicField name="*_i_ni_s_nm"  type="integer"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_i_ni_ns_m"  type="integer"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_i_ni_ns_nm"  type="integer"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_l_i_s_m"  type="long"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_l_i_s_nm"  type="long"    indexed="true"  stored="true" 
multiValued="false"/>
<dynamicField name="*_l_i_ns_m"  type="long"    indexed="true"  stored="false" 
multiValued="true"/>
<dynamicField name="*_l_i_ns_nm"  type="long"    indexed="true"  stored="false" 
multiValued="false"/>
<dynamicField name="*_l_ni_s_m"  type="long"    indexed="false"  stored="true" 
multiValued="true"/>
<dynamicField name="*_l_ni_s_nm"  type="long"    indexed="false"  stored="true" 
multiValued="false"/>
<dynamicField name="*_l_ni_ns_m"  type="long"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_l_ni_ns_nm"  type="long"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_f_i_s_m"  type="float"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_f_i_s_nm"  type="float"    indexed="true"  stored="true" 
multiValued="false"/>
<dynamicField name="*_f_i_ns_m"  type="float"    indexed="true"  stored="false" 
multiValued="true"/>
<dynamicField name="*_f_i_ns_nm"  type="float"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_f_ni_s_m"  type="float"    indexed="false"  stored="true" 
multiValued="true"/>
<dynamicField name="*_f_ni_s_nm"  type="float"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_f_ni_ns_m"  type="float"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_f_ni_ns_nm"  type="float"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_d_i_s_m"  type="double"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_d_i_s_nm"  type="double"    indexed="true"  stored="true" 
multiValued="false"/>
<dynamicField name="*_d_i_ns_m"  type="double"    indexed="true"  
stored="false" multiValued="true"/>
<dynamicField name="*_d_i_ns_nm"  type="double"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_d_ni_s_m"  type="double"    indexed="false"  
stored="true" multiValued="true"/>
<dynamicField name="*_d_ni_s_nm"  type="double"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_d_ni_ns_m"  type="double"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_d_ni_ns_nm"  type="double"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_si_i_s_m"  type="sint"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_si_i_s_nm"  type="sint"    indexed="true"  stored="true" 
multiValued="false"/>
<dynamicField name="*_si_i_ns_m"  type="sint"    indexed="true"  stored="false" 
multiValued="true"/>
<dynamicField name="*_si_i_ns_nm"  type="sint"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_si_ni_s_m"  type="sint"    indexed="false"  stored="true" 
multiValued="true"/>
<dynamicField name="*_si_ni_s_nm"  type="sint"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_si_ni_ns_m"  type="sint"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_si_ni_ns_nm"  type="sint"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_sl_i_s_m"  type="slong"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_sl_i_s_nm"  type="slong"    indexed="true"  stored="true" 
multiValued="false"/>
<dynamicField name="*_sl_i_ns_m"  type="slong"    indexed="true"  
stored="false" multiValued="true"/>
<dynamicField name="*_sl_i_ns_nm"  type="slong"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_sl_ni_s_m"  type="slong"    indexed="false"  
stored="true" multiValued="true"/>
<dynamicField name="*_sl_ni_s_nm"  type="slong"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_sl_ni_ns_m"  type="slong"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_sl_ni_ns_nm"  type="slong"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_sf_i_s_m"  type="sfloat"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_sf_i_s_nm"  type="sfloat"    indexed="true"  
stored="true" multiValued="false"/>
<dynamicField name="*_sf_i_ns_m"  type="sfloat"    indexed="true"  
stored="false" multiValued="true"/>
<dynamicField name="*_sf_i_ns_nm"  type="sfloat"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_sf_ni_s_m"  type="sfloat"    indexed="false"  
stored="true" multiValued="true"/>
<dynamicField name="*_sf_ni_s_nm"  type="sfloat"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_sf_ni_ns_m"  type="sfloat"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_sf_ni_ns_nm"  type="sfloat"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_sd_i_s_m"  type="sdouble"    indexed="true"  
stored="true" multiValued="true"/>
<dynamicField name="*_sd_i_s_nm"  type="sdouble"    indexed="true"  
stored="true" multiValued="false"/>
<dynamicField name="*_sd_i_ns_m"  type="sdouble"    indexed="true"  
stored="false" multiValued="true"/>
<dynamicField name="*_sd_i_ns_nm"  type="sdouble"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_sd_ni_s_m"  type="sdouble"    indexed="false"  
stored="true" multiValued="true"/>
<dynamicField name="*_sd_ni_s_nm"  type="sdouble"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_sd_ni_ns_m"  type="sdouble"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_sd_ni_ns_nm"  type="sdouble"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_s_i_s_m"  type="string"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_s_i_s_nm"  type="string"    indexed="true"  stored="true" 
multiValued="false"/>
<dynamicField name="*_s_i_ns_m"  type="string"    indexed="true"  
stored="false" multiValued="true"/>
<dynamicField name="*_s_i_ns_nm"  type="string"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_s_ni_s_m"  type="string"    indexed="false"  
stored="true" multiValued="true"/>
<dynamicField name="*_s_ni_s_nm"  type="string"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_s_ni_ns_m"  type="string"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_s_ni_ns_nm"  type="string"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_t_i_s_m"  type="text"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_t_i_s_nm"  type="text"    indexed="true"  stored="true" 
multiValued="false"/>
<dynamicField name="*_t_i_ns_m"  type="text"    indexed="true"  stored="false" 
multiValued="true"/>
<dynamicField name="*_t_i_ns_nm"  type="text"    indexed="true"  stored="false" 
multiValued="false"/>
<dynamicField name="*_t_ni_s_m"  type="text"    indexed="false"  stored="true" 
multiValued="true"/>
<dynamicField name="*_t_ni_s_nm"  type="text"    indexed="false"  stored="true" 
multiValued="false"/>
<dynamicField name="*_t_ni_ns_m"  type="text"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_t_ni_ns_nm"  type="text"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_b_i_s_m"  type="boolean"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_b_i_s_nm"  type="boolean"    indexed="true"  
stored="true" multiValued="false"/>
<dynamicField name="*_b_i_ns_m"  type="boolean"    indexed="true"  
stored="false" multiValued="true"/>
<dynamicField name="*_b_i_ns_nm"  type="boolean"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_b_ni_s_m"  type="boolean"    indexed="false"  
stored="true" multiValued="true"/>
<dynamicField name="*_b_ni_s_nm"  type="boolean"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_b_ni_ns_m"  type="boolean"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_b_ni_ns_nm"  type="boolean"    indexed="false"  
stored="false" multiValued="false"/>
<dynamicField name="*_dt_i_s_m"  type="date"    indexed="true"  stored="true" 
multiValued="true"/>
<dynamicField name="*_dt_i_s_nm"  type="date"    indexed="true"  stored="true" 
multiValued="false"/>
<dynamicField name="*_dt_i_ns_m"  type="date"    indexed="true"  stored="false" 
multiValued="true"/>
<dynamicField name="*_dt_i_ns_nm"  type="date"    indexed="true"  
stored="false" multiValued="false"/>
<dynamicField name="*_dt_ni_s_m"  type="date"    indexed="false"  stored="true" 
multiValued="true"/>
<dynamicField name="*_dt_ni_s_nm"  type="date"    indexed="false"  
stored="true" multiValued="false"/>
<dynamicField name="*_dt_ni_ns_m"  type="date"    indexed="false"  
stored="false" multiValued="true"/>
<dynamicField name="*_dt_ni_ns_nm"  type="date"    indexed="false"  
stored="false" multiValued="false"/>

I also defined a java annotation SolrField as below,


import java.lang.annotation.Target;
import java.lang.annotation.Retention;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;

@Retention(RUNTIME)
@Target(FIELD)
public @interface SolrField {
    boolean stored() default true;

    boolean indexed() default true;

    boolean sortable() default false;

    boolean text() default true;
}

Then, my class looks this:


public class SolrObject {
    @SolrField(text=false)
    protected String id;
    
    Float score;
    
    @SolrField(sortable=true)
    Date timestamp = new Date();
}

public class A extends SolrObject {
    @SolrField
    int ifield;

    @SolrField
    Date dateField

    @SolrField
    List<String> multiValues;

    .....
}

public class B extends SolrObject {
    ......
}

    public class C extends A {
        @SolrField
        int i;

        ......
    }

And then, when I have an object, say c = new C(). I use reflection to get all 
fields which have SolrField annotation, and map all javaa types to solr dynamic 
field types

A lot of code. Once all of this is done, my life now is very easy. My 
application now looks like,

    C c = new C();

    // this method I developed use reflection to get SolrInputDocument from an 
Object instnce which has SolrField annotation. 
    SolrInputDocument doc = getSolrInputDocument(c); 
                    
    CommonsHttpSolrServer.add(doc);

The most trick part is to map java type to solr field types i defined.

Hope it helps,
Kevin




----- Original Message ----
From: Praveen_Kumar_J <praveen.kumar.jaya...@gmail.com>
To: solr-user@lucene.apache.org
Sent: Friday, March 6, 2009 5:43:41 AM
Subject: How can I configure different types in Solr?


Hi

How do I configure different custom types or schemas in Solr?


Assume I have some custom types type1 and type1 (some composite classes).

Can I configure these 2 types in a single schema file?


I need these 2 types to be online for creating and searching data.

Please provide me some sample configuration.



Regards,
Praveen
-- 
View this message in context: 
http://www.nabble.com/How-can-I-configure-different-types-in-Solr--tp22372731p22372731.html
Sent from the Solr - User mailing list archive at Nabble.com.

Reply via email to