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;