From a8399e7c512745ee707e568f24d232d9a9a61a09 Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Thu, 5 Jun 2014 16:26:25 +0200 Subject: [PATCH] SONAR-5237 - Added sub-key match for rules --- .../main/java/org/sonar/server/rule/index/RuleIndex.java | 7 ++++--- .../java/org/sonar/server/rule/index/RuleNormalizer.java | 7 +++++-- .../org/sonar/server/rule/index/RuleIndexMediumTest.java | 8 ++++++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java b/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java index 3bd1a519c3b..c357d4b40cb 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java @@ -174,18 +174,19 @@ public class RuleIndex extends BaseIndex { String queryString = query.getQueryText(); // Human readable type of querying - qb.should(this.phraseQuery(RuleNormalizer.RuleField.KEY, queryString, 15f)); +// qb.should(this.phraseQuery(RuleNormalizer.RuleField.KEY, queryString, 15f)); qb.should(this.phraseQuery(RuleNormalizer.RuleField.NAME, queryString, 20f)); qb.should(this.phraseQuery(RuleNormalizer.RuleField.HTML_DESCRIPTION, queryString, 3f)); // Match and partial Match queries qb.should(this.termQuery(RuleNormalizer.RuleField.KEY, queryString, 15f)); + qb.should(this.termQuery(RuleNormalizer.RuleField._KEY, queryString, 35f)); qb.should(this.termQuery(RuleNormalizer.RuleField.LANGUAGE, queryString, 3f)); qb.should(this.termQuery(RuleNormalizer.RuleField.CHARACTERISTIC, queryString, 5f)); - qb.should(this.termAnyQuery(RuleNormalizer.RuleField.CHARACTERISTIC, queryString, 1f)); qb.should(this.termQuery(RuleNormalizer.RuleField.SUB_CHARACTERISTIC, queryString, 5f)); - qb.should(this.termAnyQuery(RuleNormalizer.RuleField.SUB_CHARACTERISTIC, queryString, 1f)); qb.should(this.termQuery(RuleNormalizer.RuleField._TAGS, queryString, 10f)); + qb.should(this.termAnyQuery(RuleNormalizer.RuleField.CHARACTERISTIC, queryString, 1f)); + qb.should(this.termAnyQuery(RuleNormalizer.RuleField.SUB_CHARACTERISTIC, queryString, 1f)); qb.should(this.termAnyQuery(RuleNormalizer.RuleField._TAGS, queryString, 1f)); return qb; diff --git a/sonar-server/src/main/java/org/sonar/server/rule/index/RuleNormalizer.java b/sonar-server/src/main/java/org/sonar/server/rule/index/RuleNormalizer.java index 85a9d313fc1..c2d3bd1854d 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/index/RuleNormalizer.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/index/RuleNormalizer.java @@ -73,10 +73,11 @@ public class RuleNormalizer extends BaseNormalizer { public static final class RuleField extends Indexable { - public static IndexField KEY = addSortableAndSearchable(IndexField.Type.STRING, "key"); + public static IndexField KEY = addSortable(IndexField.Type.STRING, "key"); + public static IndexField _KEY = add(IndexField.Type.STRING, "_key"); public static IndexField REPOSITORY = add(IndexField.Type.STRING, "repo"); - public static IndexField NAME = addSortableAndSearchable(IndexField.Type.STRING, "name"); + public static IndexField NAME = addSortableAndSearchable(IndexField.Type.STRING, "name"); public static IndexField CREATED_AT = addSortable(IndexField.Type.DATE, "createdAt"); public static IndexField UPDATED_AT = addSortable(IndexField.Type.DATE, "updatedAt"); public static IndexField HTML_DESCRIPTION = addSearchable(IndexField.Type.TEXT, "htmlDesc"); @@ -157,6 +158,8 @@ public class RuleNormalizer extends BaseNormalizer { /** Update Fields */ Map update = new HashMap(); update.put(RuleField.KEY.field(), rule.getKey().toString()); + update.put(RuleField._KEY.field(), ImmutableList.of(rule.getKey().repository(), rule.getKey().rule())); + update.put(RuleField.REPOSITORY.field(), rule.getRepositoryKey()); update.put(RuleField.NAME.field(), rule.getName()); update.put(RuleField.CREATED_AT.field(), rule.getCreatedAt()); diff --git a/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java b/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java index ac1822d5498..0bd00f3e9d2 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java @@ -48,7 +48,11 @@ import org.sonar.server.search.QueryOptions; import org.sonar.server.search.Result; import org.sonar.server.tester.ServerTester; -import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.List; import static org.fest.assertions.Assertions.assertThat; import static org.fest.assertions.Fail.fail; @@ -215,7 +219,7 @@ public class RuleIndexMediumTest { // partial key does not match query = new RuleQuery().setQueryText("X00"); //TODO fix non-partial match for Key search - //assertThat(index.search(query, new QueryOptions()).getHits()).isEmpty(); + assertThat(index.search(query, new QueryOptions()).getHits()).isEmpty(); // repo:key -> nice-to-have ! query = new RuleQuery().setQueryText("javascript:X001"); -- 2.39.5