From 1ead4d114275621e5c4902c2b905bb1332321d5e Mon Sep 17 00:00:00 2001 From: Daniel Schwarz Date: Fri, 13 Oct 2017 16:23:51 +0200 Subject: [PATCH] SONAR-9980 allow to search for words >15 chars in rule descriptions --- .../java/org/sonar/server/rule/index/RuleIndex.java | 2 +- .../org/sonar/server/rule/index/RuleIndexTest.java | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java index f1401b90b4c..5825312645e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java @@ -206,7 +206,7 @@ public class RuleIndex { ).boost(20f)).should( matchPhraseQuery( ENGLISH_HTML_ANALYZER.subField(FIELD_RULE_HTML_DESCRIPTION), - StringUtils.left(token, DefaultIndexSettings.MAXIMUM_NGRAM_LENGTH) + token ).boost(3f)) ).forEach(textQuery::must); qb.should(textQuery.boost(20f)); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java index ad994bad979..0c0f15ee884 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java @@ -218,6 +218,8 @@ public class RuleIndexTest { RuleDefinitionDto rule3 = createRule(rule -> rule.setRuleKey("1000").setDescription("Another great rule CWE-1000")); RuleDefinitionDto rule4 = createRule(rule -> rule.setRuleKey("404") .setDescription("

HTML-Geeks

special formatting!

insidetables
")); + RuleDefinitionDto rule5 = createRule(rule -> rule.setRuleKey("405") + .setDescription("internationalization missunderstandings alsdkjfnadklsjfnadkdfnsksdjfn")); index(); // partial match at word boundary @@ -242,15 +244,18 @@ public class RuleIndexTest { assertThat(underTest.search(new RuleQuery().setQueryText("and"), new SearchOptions()).getIds()).isEmpty(); assertThat(underTest.search(new RuleQuery().setQueryText("great and shiny"), new SearchOptions()).getIds()).isEmpty(); - // stopwords - assertThat(underTest.search(new RuleQuery().setQueryText("and"), new SearchOptions()).getIds()).isEmpty(); - assertThat(underTest.search(new RuleQuery().setQueryText("great and shiny"), new SearchOptions()).getIds()).isEmpty(); - // html assertThat(underTest.search(new RuleQuery().setQueryText("h1"), new SearchOptions()).getIds()).isEmpty(); assertThat(underTest.search(new RuleQuery().setQueryText("style"), new SearchOptions()).getIds()).isEmpty(); assertThat(underTest.search(new RuleQuery().setQueryText("special"), new SearchOptions()).getIds()).containsExactlyInAnyOrder(rule4.getKey()); assertThat(underTest.search(new RuleQuery().setQueryText("geeks formatting inside tables"), new SearchOptions()).getIds()).containsExactlyInAnyOrder(rule4.getKey()); + + // long words + assertThat(underTest.search(new RuleQuery().setQueryText("missunderstand"), new SearchOptions()).getIds()).containsExactlyInAnyOrder(rule5.getKey()); + assertThat(underTest.search(new RuleQuery().setQueryText("missunderstandings"), new SearchOptions()).getIds()).containsExactlyInAnyOrder(rule5.getKey()); + assertThat(underTest.search(new RuleQuery().setQueryText("alsdkjfnadklsjfnadkdfnsksdjfn"), new SearchOptions()).getIds()).containsExactlyInAnyOrder(rule5.getKey()); + assertThat(underTest.search(new RuleQuery().setQueryText("internationalization"), new SearchOptions()).getIds()).containsExactlyInAnyOrder(rule5.getKey()); + assertThat(underTest.search(new RuleQuery().setQueryText("internationalizationBlaBla"), new SearchOptions()).getIds()).isEmpty(); } @Test -- 2.39.5