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 <[email protected]>
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;