This is an automated email from the ASF dual-hosted git repository.

mmiklavcic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metron.git


The following commit(s) were added to refs/heads/master by this push:
     new 8c4b53d  METRON-2197 Add debugging info output for Solr queries 
(mmiklavc) closes apache/metron#1475
8c4b53d is described below

commit 8c4b53dae73067e05cfcdac42ceb9c562bf4c2fd
Author: mmiklavc <michael.miklav...@gmail.com>
AuthorDate: Mon Aug 5 08:42:03 2019 -0600

    METRON-2197 Add debugging info output for Solr queries (mmiklavc) closes 
apache/metron#1475
---
 .../org/apache/metron/solr/dao/SolrSearchDao.java  | 50 ++++++++++++++++------
 .../integration/SolrSearchIntegrationTest.java     |  1 -
 2 files changed, 37 insertions(+), 14 deletions(-)

diff --git 
a/metron-platform/metron-solr/metron-solr-common/src/main/java/org/apache/metron/solr/dao/SolrSearchDao.java
 
b/metron-platform/metron-solr/metron-solr-common/src/main/java/org/apache/metron/solr/dao/SolrSearchDao.java
index 134d28c..885132d 100644
--- 
a/metron-platform/metron-solr/metron-solr-common/src/main/java/org/apache/metron/solr/dao/SolrSearchDao.java
+++ 
b/metron-platform/metron-solr/metron-solr-common/src/main/java/org/apache/metron/solr/dao/SolrSearchDao.java
@@ -81,6 +81,20 @@ public class SolrSearchDao implements SearchDao {
   // If null, use whatever the searchRequest defines.
   public SearchResponse search(SearchRequest searchRequest, String fieldList)
       throws InvalidSearchException {
+    validateSearchRequest(searchRequest);
+    try {
+      SolrQuery query = buildSearchRequest(searchRequest, fieldList);
+      QueryResponse response = client.query(query);
+      logQueryDebugDetail(query, response);
+      return buildSearchResponse(searchRequest, response);
+    } catch (SolrException | IOException | SolrServerException e) {
+      String msg = e.getMessage();
+      LOG.error(msg, e);
+      throw new InvalidSearchException(msg, e);
+    }
+  }
+
+  private void validateSearchRequest(SearchRequest searchRequest) throws 
InvalidSearchException {
     if (searchRequest.getQuery() == null) {
       throw new InvalidSearchException("Search query is invalid: null");
     }
@@ -91,29 +105,31 @@ public class SolrSearchDao implements SearchDao {
       throw new InvalidSearchException(
           "Search result size must be less than " + 
accessConfig.getMaxSearchResults());
     }
-    try {
-      SolrQuery query = buildSearchRequest(searchRequest, fieldList);
-      QueryResponse response = client.query(query);
-      return buildSearchResponse(searchRequest, response);
-    } catch (SolrException | IOException | SolrServerException e) {
-      String msg = e.getMessage();
-      LOG.error(msg, e);
-      throw new InvalidSearchException(msg, e);
+  }
+
+  private void logQueryDebugDetail(SolrQuery query, QueryResponse response) {
+    if (LOG.isDebugEnabled()) {
+      final String ls = System.lineSeparator();
+      LOG.debug(
+          "Solr query string: {}{} Solr query debug map: {}{} Solr query 
elapsed time: {}{} Solr query Q time: {}",
+          query.toQueryString(), ls,
+          response.getDebugMap(), ls,
+          response.getElapsedTime(), ls,
+          response.getQTime());
     }
   }
 
   @Override
   public GroupResponse group(GroupRequest groupRequest) throws 
InvalidSearchException {
     try {
-      if (groupRequest.getGroups() == null || groupRequest.getGroups().size() 
== 0) {
-        throw new InvalidSearchException("At least 1 group must be provided.");
-      }
+      validateGroupRequest(groupRequest);
       String groupNames = 
groupRequest.getGroups().stream().map(Group::getField).collect(
           Collectors.joining(","));
       SolrQuery query = new SolrQuery()
           .setStart(0)
           .setRows(0)
-          .setQuery(groupRequest.getQuery());
+          .setQuery(groupRequest.getQuery())
+          .setShowDebugInfo(LOG.isDebugEnabled()); // tie Solr query debug 
output to our log level
 
       query.set("collection", getCollections(groupRequest.getIndices()));
       Optional<String> scoreField = groupRequest.getScoreField();
@@ -124,6 +140,7 @@ public class SolrSearchDao implements SearchDao {
       query.set("facet", true);
       query.set("facet.pivot", String.format("{!stats=piv1}%s", groupNames));
       QueryResponse response = client.query(query);
+      logQueryDebugDetail(query, response);
       return buildGroupResponse(groupRequest, response);
     } catch (IOException | SolrServerException e) {
       String msg = e.getMessage();
@@ -132,6 +149,12 @@ public class SolrSearchDao implements SearchDao {
     }
   }
 
+  private void validateGroupRequest(GroupRequest groupRequest) throws 
InvalidSearchException {
+    if (groupRequest.getGroups() == null || groupRequest.getGroups().size() == 
0) {
+      throw new InvalidSearchException("At least 1 group must be provided.");
+    }
+  }
+
   // An explicit, overriding fieldList can be provided.  This is useful for 
things like metaalerts,
   // which may need to modify that parameter.
   protected SolrQuery buildSearchRequest(
@@ -139,7 +162,8 @@ public class SolrSearchDao implements SearchDao {
     SolrQuery query = new SolrQuery()
         .setStart(searchRequest.getFrom())
         .setRows(searchRequest.getSize())
-        .setQuery(searchRequest.getQuery());
+        .setQuery(searchRequest.getQuery())
+        .setShowDebugInfo(LOG.isDebugEnabled()); // tie Solr query debug 
output to our log level
 
     // handle sort fields
     for (SortField sortField : searchRequest.getSort()) {
diff --git 
a/metron-platform/metron-solr/metron-solr-common/src/test/java/org/apache/metron/solr/integration/SolrSearchIntegrationTest.java
 
b/metron-platform/metron-solr/metron-solr-common/src/test/java/org/apache/metron/solr/integration/SolrSearchIntegrationTest.java
index de01df9..b232ed5 100644
--- 
a/metron-platform/metron-solr/metron-solr-common/src/test/java/org/apache/metron/solr/integration/SolrSearchIntegrationTest.java
+++ 
b/metron-platform/metron-solr/metron-solr-common/src/test/java/org/apache/metron/solr/integration/SolrSearchIntegrationTest.java
@@ -41,7 +41,6 @@ import org.apache.solr.client.solrj.SolrServerException;
 import org.json.simple.JSONArray;
 import org.json.simple.parser.JSONParser;
 import org.json.simple.parser.ParseException;
-import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;

Reply via email to