package org.nextprot.api.solr.index;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.nextprot.api.commons.utils.Pair;
import org.nextprot.api.solr.AutocompleteConfiguration;
import org.nextprot.api.solr.FieldConfigSet;
import org.nextprot.api.solr.IndexConfiguration;
import org.nextprot.api.solr.IndexField;
import org.nextprot.api.solr.IndexParameter;
import org.nextprot.api.solr.IndexTemplate;
import org.nextprot.api.solr.SortConfig;
public class CvIndex extends IndexTemplate {
// a way to get it easily from everywhere !
static public final String NAME = "term";
public CvIndex() {
super(CvIndex.NAME, "npcvs1");
}
public Class<? extends ConfigurationName> getConfigNames() {
return Configurations.class;
}
public Class<? extends IndexField> getFields() {
return CvField.class;
}
@Override
protected void setupConfigurations() {
IndexConfiguration defaultConfig = new IndexConfiguration(Configurations.SIMPLE);
defaultConfig.addConfigSet(FieldConfigSet.create(IndexParameter.FL)
.add(CvField.AC)
.add(CvField.NAME)
.add(CvField.SYNONYMS)
.add(CvField.DESCRIPTION)
.add(CvField.PROPERTIES)
.add(CvField.FILTERS));
//.add(CvField.TEXT));
defaultConfig.addConfigSet(FieldConfigSet.create(IndexParameter.QF)
.add(CvField.AC, 64)
.add(CvField.NAME, 32)
.add(CvField.SYNONYMS, 32)
.add(CvField.DESCRIPTION, 16)
.add(CvField.PROPERTIES, 8)
.add(CvField.OTHER_XREFS, 8));
defaultConfig.addConfigSet(FieldConfigSet.create(IndexParameter.PF)
.add(CvField.AC, 640)
.add(CvField.NAME, 320)
.add(CvField.SYNONYMS, 320)
.add(CvField.DESCRIPTION, 160)
.add(CvField.PROPERTIES, 80)
.add(CvField.OTHER_XREFS, 80));
/* defaultConfig.addConfigSet(FieldConfigSet.create(IndexParameter.FN)
.add(CvField.NAME, 1)
.add(CvField.DESCRIPTION, 1));
defaultConfig.addConfigSet(FieldConfigSet.create(IndexParameter.HI)
.add(CvField.AC)
.add(CvField.NAME)
.add(CvField.DESCRIPTION)
.add(CvField.PROPERTIES));
*/
defaultConfig.addOtherParameter("defType", "edismax")
.addOtherParameter("facet", "true")
.addOtherParameter("facet.field", "filters")
.addOtherParameter("facet.limit", "10")
.addOtherParameter("facet.method", "enum")
.addOtherParameter("facet.mincount", "1")
.addOtherParameter("facet.sort", "count");
defaultConfig.addSortConfig(SortConfig.create("default", new Pair[] {
Pair.create(CvField.SCORE, ORDER.desc),
Pair.create(CvField.FILTERS, ORDER.asc)
}));
defaultConfig.addSortConfig(SortConfig.create("name", new Pair[] {
Pair.create(CvField.NAME_S, ORDER.asc),
Pair.create(CvField.FILTERS, ORDER.asc)
}));
defaultConfig.setDefaultSortName("default");
addConfiguration(defaultConfig);
setConfigAsDefault(Configurations.SIMPLE);
AutocompleteConfiguration autocompleteConfig = new AutocompleteConfiguration(Configurations.AUTOCOMPLETE, defaultConfig);
autocompleteConfig.addOtherParameter("defType", "edismax")
.addOtherParameter("facet", "true")
.addOtherParameter("facet.field", "text")
.addOtherParameter("facet.limit", "10")
.addOtherParameter("facet.method", "enum")
.addOtherParameter("facet.mincount", "1")
.addOtherParameter("facet.sort", "count")
.addOtherParameter("stopwords", "true");
addConfiguration(autocompleteConfig);
}
private static class Configurations extends ConfigurationName {
public static final String SIMPLE = "simple";
public static final String AUTOCOMPLETE = "autocomplete";
}
@Override
public IndexField[] getFieldValues() {
return CvField.values();
}
public static enum CvField implements IndexField {
ID("id"),
AC("ac"),
NAME("name"),
NAME_S("name_s"),
SYNONYMS("synonyms"),
DESCRIPTION("description"),
PROPERTIES("properties"),
OTHER_XREFS("other_xrefs"),
FILTERS("filters"),
SCORE("score"),
TEXT("text");
private String name;
private String publicName;
private CvField(String name) {
this.name = name;
}
private CvField(String name, String publicName) {
this.name = name;
this.publicName=publicName;
}
public String getName() {
return this.name;
}
@Override
public String getPublicName() {
return this.publicName;
}
@Override
public boolean hasPublicName() {
return this.publicName!=null && this.publicName.length()>0;
}
}
}