diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java |
Publish
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java new file mode 100644 index 00000000000..c0dcf27c88d --- /dev/null +++ b/config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java @@ -0,0 +1,140 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.searchdefinition; + +import com.yahoo.searchdefinition.document.SDField; + +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.Set; + +/** + * The rank profile containing default settings. This is derived from the fields + * whenever this is accessed. + * + * @author <a href="mailto:bratseth@yahoo-inc.com">Jon S Bratseth</a> + */ +public class DefaultRankProfile extends RankProfile { + + /** + * Creates a new rank profile + * + * @param rankProfileRegistry The {@link com.yahoo.searchdefinition.RankProfileRegistry} to use for storing and looking up rank profiles. + */ + public DefaultRankProfile(Search search, RankProfileRegistry rankProfileRegistry) { + super("default", search, rankProfileRegistry); + } + + /** + * Does nothing, the default rank profile can not inherit anything + */ + // TODO: Why not? If that's the case, then fail attempts at it + public void setInherited(String inheritedName) { + } + + /** + * Returns null, the default rank profile can not inherit anything + */ + public String getInheritedName() { + return null; + } + + /** + * Returns the rank boost value of the given field + */ + public RankSetting getRankSetting(String fieldOrIndex,RankSetting.Type type) { + RankSetting setting=super.getRankSetting(fieldOrIndex,type); + if (setting!=null) return setting; + + SDField field=getSearch().getField(fieldOrIndex); + if (field!=null) { + setting=toRankSetting(field,type); + if (setting!=null) + return setting; + } + + Index index=getSearch().getIndex(fieldOrIndex); + if (index!=null) { + setting=toRankSetting(index,type); + if (setting!=null) + return setting; + } + + return null; + } + + private RankSetting toRankSetting(SDField field,RankSetting.Type type) { + if (type.equals(RankSetting.Type.WEIGHT) && field.getWeight()>0 && field.getWeight()!=100) + return new RankSetting(field.getName(),type,field.getWeight()); + if (type.equals(RankSetting.Type.RANKTYPE)) + return new RankSetting(field.getName(),type,field.getRankType()); + if (type.equals(RankSetting.Type.LITERALBOOST) && field.getLiteralBoost()>0) + return new RankSetting(field.getName(),type,field.getLiteralBoost()); + + // Index level setting really + if (type.equals(RankSetting.Type.PREFERBITVECTOR) && field.getRanking().isFilter()) { + return new RankSetting(field.getName(), type, true); + } + + return null; + } + + private RankSetting toRankSetting(Index index, RankSetting.Type type) { + /* TODO: Add support for indexes by adding a ranking object to the index + if (type.equals(RankSetting.Type.PREFERBITVECTOR) && index.isPreferBitVector()) { + return new RankSetting(index.getName(), type, new Boolean(true)); + } + */ + return null; + } + + /** + * Returns the names of the fields which have a rank boost setting + * explicitly in this profile or in fields + */ + public Set<RankSetting> rankSettings() { + Set<RankSetting> settings=new LinkedHashSet<>(20); + settings.addAll(this.rankSettings); + for (SDField field : getSearch().allFieldsList() ) { + addSetting(field,RankSetting.Type.WEIGHT,settings); + addSetting(field,RankSetting.Type.RANKTYPE,settings); + addSetting(field,RankSetting.Type.LITERALBOOST,settings); + addSetting(field,RankSetting.Type.PREFERBITVECTOR,settings); + } + + // Foer settings that really pertains to indexes do the explicit indexes too + for (Index index : getSearch().getExplicitIndices()) { + addSetting(index,RankSetting.Type.PREFERBITVECTOR,settings); + } + return settings; + } + + private void addSetting(SDField field,RankSetting.Type type,Set<RankSetting> settings) { + if (type.isIndexLevel()) { + addIndexSettings(field,type,settings); + } + else { + RankSetting setting=toRankSetting(field,type); + if (setting==null) return; + settings.add(setting); + } + } + + private void addIndexSettings(SDField field,RankSetting.Type type,Set<RankSetting> settings) { + for (Iterator i = field.getFieldNameAsIterator(); i.hasNext(); ) { + String indexName=(String)i.next(); + Index explicitIndex=field.getIndex(indexName); + + // TODO: Make a ranking object in the index override the field level ranking object + if (type.equals(RankSetting.Type.PREFERBITVECTOR) && field.getRanking().isFilter()) { + settings.add(new RankSetting(indexName, type, true)); + } + } + } + + private void addSetting(Index index,RankSetting.Type type,Set<RankSetting> settings) { + RankSetting setting=toRankSetting(index,type); + if (setting==null) return; + settings.add(setting); + } + +} |