]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5237 - Initial mediumtest working
authorStephane Gamard <stephane.gamard@searchbox.com>
Wed, 30 Apr 2014 17:04:59 +0000 (19:04 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Wed, 30 Apr 2014 17:05:18 +0000 (19:05 +0200)
sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java
sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java
sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java

index 00892f775e42c9b45c31148442618139296b9dd5..4b0fc473172d76bdb06cb391f1491d4e7de8a750 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.server.rule2;
 
 import com.google.common.collect.ImmutableSet;
+import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.elasticsearch.index.query.BoolFilterBuilder;
@@ -27,6 +28,7 @@ import org.elasticsearch.index.query.FilterBuilders;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.SearchHitField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sonar.api.rule.RuleKey;
@@ -40,8 +42,10 @@ import org.sonar.server.search.BaseIndex;
 import org.sonar.server.search.Hit;
 import org.sonar.server.search.QueryOptions;
 import org.sonar.server.search.Results;
+import org.yecht.Data;
 
 import java.io.IOException;
+import java.util.Map;
 import java.util.Set;
 
 import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
@@ -63,7 +67,7 @@ public class RuleIndex extends BaseIndex<RuleKey, RuleDto> {
     RuleField.UDPATED_AT.key());
 
   public RuleIndex(RuleNormalizer normalizer, WorkQueue workQueue,
-    Profiling profiling, ESNode node) {
+                   Profiling profiling, ESNode node) {
     super(normalizer, workQueue, profiling, node);
   }
 
@@ -162,20 +166,32 @@ public class RuleIndex extends BaseIndex<RuleKey, RuleDto> {
     this.addTermFilter(RuleField.SEVERITY.key(), query.getSeverities(), fb);
     this.addTermFilter(RuleField.KEY.key(), query.getKey(), fb);
 
+    QueryBuilder mainQuery = QueryBuilders.filteredQuery(qb, fb);
+
     //Create ES query Object;
-    SearchResponse esResult = getClient()
+    SearchRequestBuilder esSearch = getClient()
       .prepareSearch(this.getIndexName())
-      .setQuery(QueryBuilders.filteredQuery(qb, fb))
-      .addFields(options.getFieldsToReturn().toArray(new String[options.getFieldsToReturn().size()]))
-      .get();
+      .setQuery(mainQuery)
+      .addFields(options.getFieldsToReturn().toArray(new String[options.getFieldsToReturn().size()]));
+
+
+    SearchResponse esResult = esSearch.get();
+
 
     Results results = new Results()
       .setTotal((int) esResult.getHits().totalHits())
       .setTime(esResult.getTookInMillis());
 
-    for (SearchHit hit : esResult.getHits().getHits()) {
-      results.getHits().add(
-        Hit.fromMap(hit.score(), hit.sourceAsMap()));
+    for (SearchHit esHit : esResult.getHits().getHits()) {
+      Hit hit = new Hit(esHit.score());
+      for (Map.Entry<String, SearchHitField> entry : esHit.fields().entrySet()) {
+        if(entry.getValue().getValues().size()>1) {
+          hit.getFields().put(entry.getKey(), entry.getValue().getValues());
+        } else {
+          hit.getFields().put(entry.getKey(), entry.getValue().getValue());
+        }
+      }
+      results.getHits().add(hit);
     }
 
     return results;
index 986624d698287a1e6bf519d027a52e20435fcb0e..59aa9d28b7bc8f9f340f13a79fdc18efd7decd59 100644 (file)
@@ -30,6 +30,7 @@ import org.elasticsearch.action.update.UpdateResponse;
 import org.elasticsearch.client.Client;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.elasticsearch.index.query.BoolFilterBuilder;
+import org.elasticsearch.index.query.FilterBuilder;
 import org.elasticsearch.index.query.FilterBuilders;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -112,8 +113,8 @@ public abstract class BaseIndex<K extends Serializable, E extends Dto<K>> implem
       LOG.info("Setup of index {}", this.getIndexName());
 
       try {
-        LOG.info("Settings: {}", getIndexSettings().string());
-        LOG.info("Mapping: {}", getMapping().string());
+        LOG.debug("Settings: {}", getIndexSettings().string());
+        LOG.debug("Mapping: {}", getMapping().string());
       } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
@@ -158,12 +159,13 @@ public abstract class BaseIndex<K extends Serializable, E extends Dto<K>> implem
   public void insert(K key) {
     try {
       XContentBuilder doc = normalizer.normalize(key);
-      String keyvalue = this.getKeyValue(key);
-      if (doc != null && keyvalue != null && !keyvalue.isEmpty()) {
+      String keyValue = this.getKeyValue(key);
+      if (doc != null && keyValue != null && !keyValue.isEmpty()) {
         LOG.debug("Update document with key {}", key);
         IndexResponse result = getClient().index(
           new IndexRequest(this.getIndexName(),
-            this.getType(), keyvalue)
+            this.getType(), keyValue)
+            .refresh(true)
             .source(doc)).get();
       } else {
         LOG.error("Could not normalize document {} for insert in ",
@@ -183,6 +185,7 @@ public abstract class BaseIndex<K extends Serializable, E extends Dto<K>> implem
       UpdateResponse result = getClient().update(
         new UpdateRequest(this.getIndexName(),
           this.getType(), this.getKeyValue(key))
+                .refresh(true)
           .doc(doc)).get();
     } catch (Exception e) {
       LOG.error("Could not update documet for index {}: {}",
@@ -224,13 +227,12 @@ public abstract class BaseIndex<K extends Serializable, E extends Dto<K>> implem
 
   protected BoolFilterBuilder addTermFilter(String field, Collection<String> values, BoolFilterBuilder filter) {
     if (values != null && !values.isEmpty()) {
-      BoolFilterBuilder valueFilter = FilterBuilders.boolFilter()
-        .cache(true)
-        .cacheKey(field + "_vs");
+      BoolFilterBuilder valuesFilter = FilterBuilders.boolFilter();
       for (String value : values) {
-        valueFilter.should(FilterBuilders.termFilter(field, value));
+          FilterBuilder valueFilter = FilterBuilders.termFilter(field, value);
+          valuesFilter.should(valueFilter);
       }
-      filter.must(valueFilter);
+      filter.must(valuesFilter);
     }
     return filter;
   }
index ddc00ee07ff4473f3406affa8634b85d125066a3..f6dcc3150c5b768a9fda7a284b9a67db3c00e66a 100644 (file)
@@ -22,7 +22,6 @@ package org.sonar.server.rule2;
 import com.google.common.collect.Iterables;
 import org.junit.After;
 import org.junit.ClassRule;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
@@ -42,8 +41,8 @@ import static org.fest.assertions.Assertions.assertThat;
 public class RuleMediumTest {
 
   @ClassRule
-  public static ServerTester tester = new ServerTester();
-    //.setProperty("sonar.es.http.port", "8888");
+  public static ServerTester tester = new ServerTester()
+    .setProperty("sonar.es.http.port", "8888");
 
   @After
   public void clear_data_store() {
@@ -77,7 +76,6 @@ public class RuleMediumTest {
   }
 
   @Test
-  @Ignore
   public void search_rules_by_repositories() throws InterruptedException {
     RuleDao dao = tester.get(RuleDao.class);
     dao.insert(newRuleDto(RuleKey.of("javascript", "S001")));
@@ -86,6 +84,8 @@ public class RuleMediumTest {
     RuleService service = tester.get(RuleService.class);
     RuleQuery query = service.newRuleQuery().setRepositories(Arrays.asList("findbugs", "java"));
     Results results = service.search(query, new QueryOptions());
+
+
     assertThat(results.getTotal()).isEqualTo(1);
     assertThat(results.getHits()).hasSize(1);
     assertThat(Iterables.getFirst(results.getHits(), null).getFieldAsString("key")).isEqualTo("S002");