aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /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.java140
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);
+ }
+
+}